一、Tomcat部署
在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。
1、关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
jdk-8u391-linux-x64.tar.gz
apache-tomcat-9.0.16.tar.gz
systemctl stop ufw
systemctl disable ufw
2、安装JDK
cd /opt
tar zxvf jdk-8u391-linux-x64.tar.gz -C /usr/local/
3、设置JDK环境变量
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/jdk1.8.0_391
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
source /etc/profile.d/java.sh
java -version
4、安装启动Tomcat
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
##启动tomcat ##
#后台启动
/usr/local/tomcat/bin/startup.sh
或
/usr/local/tomcat/bin/catalina.sh start
#前台启动
/usr/local/tomcat/bin/catalina.sh run
ss -natp | grep 8080
5、浏览器访问Tomcat的默认主页
http://本机地址:8080
6、systemd管理启动控制
vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/jdk1.8.0_391"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl start tomcat #启动
systemctl enable tomcat #配置自启
systemctl stop tomcat #停止服务
systemctl status tomcat #检测状态
二、Tomcat优化
2.1 配置文件优化
修改tomcat主配置文件 conf/server.xml 中的连接器配置 <Connector port="8080" .... />
maxThreads |
最大线程数/并发连接数,参考值 500 800 1000 |
minSpareThreads | 最小空闲线程数/初始化线程数,参考值 100 |
protocol | 指定HTTP/1.1协议的工作模式为NIO,参考值 org.apache.coyote.http11.Http11NioProtocol |
acceptCount | 等待队列数,参考值 1000 |
enableLookups | 关闭DNS解析,参考值 false |
URIEncoding | 网页编码格式,参考值 UTF-8 |
connectionTimeout | 连接保持超时时间,参考值 20000 30000 |
maxKeepAliveRequests | 连接保持最大请求数,参考值 100,为1时表示关闭连接保持,为-1时表示不限制请求数 |
compression | 网页压缩,参考值 on |
disableUploadTimeout | 关闭上传超时,参考值 true |
2.2 内核优化
2.2.1 系统内核优化
1、临时配置
ulimit -n 65535 #设置用户级别进程打开的文件数
ulimit -u 65535 #设置用户级别能够打开的进程/线程总数
2、永久配置
vim /etc/security/limits.conf
* soft nofile 65535 #设置用户级别进程打开的文件数
* hard nofile 65535
* soft nproc 65535 #设置用户级别能够打开的进程/线程总数
* hard nproc 65535
2.2.2 内核资源限制优化
vim /etc/sysctl.conf
#解决TIME_WAIT数量过多问题
net.ipv4.tcp_tw_reuse=1 #开启TIME_WAIT连接重用于新的TCP连接,默认值为0
net.ipv4.tcp_max_tw_buckets=5000 #减少系统可以保持的TIME_WAIT连接的最大数量,如果超过该值就不需要等待2MSL直接关闭TIME_WAIT连接,默认值为16384
net.ipv4.tcp_fin_timeout=30 #减少处于TIME_WAIT状态的超时时间(MSL时间),尽快释放系统的连接资源,默认值为60
#进一步优化,提升服务器的并发能力,还能预防一些攻击
net.ipv4.ip_local_port_range=1024 65535 #增加用于向外连接的本地端口范围,默认为32768 60999
net.ipv4.tcp_keepalive_time=1200 #减少TCP连接保活时间,设置TCP连接在没用数据传输时多久发送一次保活探测包来确认客户端是否断网,默认值为7200
net.ipv4.tcp_max_syn_backlog=65535 #增加TCP半连接队列容量,设置TCP三次握手建立阶段接收SYN请求队列的最大长度,默认为128
net.core.netdev_max_backlog=65535 #增加网络接口队列长度,可以避免在高负债情况下丢包,默认值为1000
net.core.somaxconn=65535 #增加系统中每个TCP端口监听队列的最大长度,默认值为128
net.ipv4.tcp_syncookies=1 #开启SYN Cookies功能,可以用于预防SYN Flood攻击
net.ipv4.tcp_synack_retries=2 #减少发起syn+ack的最大重试次数,可以适当预防syn flood攻击,默认为5
2.3 JVM优化
修改 bin/catalina.sh 文件,在 cygwin=false 位置前面添加 JAVA_OPTS 参数配置。
JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:ParallelGCThreads=2"
-server #开启服务器模式,提升性能
-Xms2048m -Xmx2048m #设置JVM堆内存初始值和最大值,要设置为相同大小,一般为物理内存的1/2。Xms和Xmx设置相同大小的目的是为了减少GC(垃圾回收)次数,以及在GC后不需要JVM重新分配内存而浪费资源
-XX:PermSize=512m -XX:MaxPermSize=512m #设置非堆内存(永久代)的初始值和最大值,一般不超过物理内存的1/4注:堆内存和非堆内存的和不能超过总可用内存
-Xmn768m #设置JVM堆内存新生代的大小,一般为堆内存的1/3或3/8
-XX:ParallelGCThreads=2 #设置并行GC的线程数,提高垃圾回收效率,一般为与CPU数量相同(不超过8)