一、说明
系统版本采用Centos7,Tomcat版本采用8.5,JDK版本采用1.8;
服务安装,JDK设置,tomcat优化,以及常见问题解决
二、服务安装
1、JDK安装
本次使用 jdk-8u181-linux-x64.rpm 安装包,使用rpm -ivh jdk-8u181-linux-x64.rpm一键安装;
2、服务器时区设置
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3、tomcat服务安装
本次使用apache-tomcat-8.5.41.tar.gz
在合适位置解压,tar -xvf apache-tomcat-8.5.41.tar.gz
cd apache-tomcat-8.5.41/bin
pwd获取当前目录路径,例如:/home/tomcat/bin
cd /usr/lib/systemd/system,进入系统服务目录
touch tomcat.service,新建tomcat服务文件
vi tomcat.service 填写内容如下:
[Unit]
Description=关于tomcat的服务描述
After=network.target
[Service]
Type=forking
ExecStart=/home/tomcat/bin/startup.sh
ExecReload=
ExecStop=/home/tomcat/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
保存退出:wq!
重载系统服务:systemctl daemon-reload
开机自启:systemctl enable tomcat.service
取消开机自启:systemctl disabled tomcat.service
重启服务:systemctl restart tomcat.service
停止服务:systemctl stop tomcat.service
三、系统级优化
主要是系统高并发优化
系统内核优化
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
#客户端30秒未响应,关掉连接
net.ipv4.tcp_fin_timeout=30
#表示SYN队列的长度,等待连接的网络连接数。
net.ipv4.tcp_max_syn_backlog=20480
#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_syncookies=1
#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse=1
#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle=1
#表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟
net.ipv4.tcp_keepalive_time=1200
#表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息
net.ipv4.tcp_max_tw_buckets=6000
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
net.core.netdev_max_backlog=32768
net.core.somaxconn=32768
net.core.wmem_default=8388608
net.core.rmem_default=8388608
net.ipv4.tcp_synack_retries=2
net.ipv4.tcp_syn_retries=2
立即生效:/sbin/sysctl -p
系统最大连接数优化
查看当前系统最大连接数:ulimit -n
编辑:vi /etc/security/limits.conf
增加下列内容:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
编辑:vi /etc/pam.d/login
增加下列内容:
session required pam_limits.so
保存,重启生效
tomcat优化
tomcat堆栈优化
修改tomcat bin目录中catalina.sh,
增加如下内容:
JAVA_OPTS="-Xms2048m -Xmx8000m -XX:PermSize=256m -XX:MaxPermSize=2000m"
-Djava.security.egd=file:/dev/./urandom
修改tomcat conf目录中server.xml
修改Connector标签,修改内容如下
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" disableUploadTimeout="true" maxHttpHeaderSize="8192" maxThreads="5000"
minSpareThreads="1000" maxSpareThreads="2000" enableLookups="false" acceptCount="5000" redirectPort="8043" compression="on"
compressionMinSize="50" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"/>
四、一些常见bug
tomcat启动慢
tomcat每次启动时间很长,经常性长达10几分钟,这是因为centos熵池中随机数生出随机数时卡住,导致启动慢
推荐使用安装rngd服务,增加熵池
yum install rng-tools
systemctl start rngd
tomcat在高并发是出现too many open files
出现这个问题的原因是因为 tomcat 默认设置文件打开数为 4096(不管系统最大连接数设置多少)
修改vi /usr/lib/systemd/system/tomcat.service
在 [Service] 中添加 下列内容
LimitNOFILE=1048576
LimitNPROC=1048576