Tomcat默认安装下的缺省配置并不适合生产环境,它可能会频繁出现假死现象需要重启,只有通过不断压测优化才能让它最高效率稳定的运行。优化主要包括三方面,分别为:
操作系统优化(内核参数优化)
Tomcat配置文件参数优化
Java虚拟机(JVM)调优
关于 Tomcat 主配置文件 server.xml 里面很多默认的配置项,并不能满足业务需求,常用的优化参数如下。
vim /usr/local/tomcat/conf/server.xml
在http连接器配置中添加参数
常用参数: | =后添加的内容 |
---|---|
maxTreads | 最大线程数/并发 |
processorCache | 进程缓冲 |
acceptCount | 等待队列数 |
enableLookups | 关闭DNS反向查询 |
disableUploadTimeout | 关闭上传超时 |
URTEncoding | 网页字符集编码格式UTF-8 |
maxKeepAliveRequests | 长连接最大请求数 |
connectionTimeout | 长连接超时时间 |
compression | 网页压缩 |
如果已经对代码进行了动静分离,静态页面和图片等数据就不需要 Tomcat 处理了,那么也就不需要在 Tomcat 中配置压缩了。因为这里只有一台 Tomcat 服务器,而且压测的是Tomcat 首页,会有图片和静态资源文件,所以这里启用压缩。
/etc/securiy/limits.conf 内核限制文件
soft | noproc | 65535 | 打开的进程数 |
---|---|---|---|
hard | noproc | 65535 | |
soft | nofile | 65535 | 打开的文件数 |
hard | nofile | 65535 | |
soft | memlock | unlimited | 不做内存锁定 |
hard | memlock | unlimited |
net.ipv4.tcp_syncookies = 1
开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击
net.ipv4.tcp_tw_reuse = 1
开启重用,允许将TIME-WAIT sockets重新用于新的TCP连接
net.ipv4.tcp_tw_recycle = 1
开启TCP连接中TIME-WAIT sockets的快速回收
net.ipv4.tcp_fin_timeout = 30
修改系默认的 TIMEOUT 时间 (MSI值)
net.ipv4.tcp max_tw_buckets = 6000
系统同时保持TIME-WAIT的最人数量
net.ipv4.ip_local_port_range = 1024 65535
外向连接的端口范围,默认为32768 60999
net.ipv4.tcp max_syn_backlog = 65536
系统能接受的tcp半连接的最大队列数,TCP三次提手建立阶段接受SYN请求队列的最大长度
net.core.somaxconn = 65536
每一个端口最大的 isten 监听队列的长度(排队等待接收的最大连接数)
net .ipv4 .tcp_keepalive_time=600
发送keepalive探测包消息的频率,确认客户端是否断网
修改 bin/catalina.sh 文件,在 cygwin=false 配置前添加 JAVA_OPTS 参数
JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -XX:PermSize=1024m -XX:MaxPermSize=1024m -Xmn768m -XX:ParallelGCThreads=2"-server 表示启动JDK的Server模式,使得在多核服务器性能更佳
-Xms2048m -Xmx2048m 设置JVM堆内存初始值和最大值为一样大,一般设置为物理内存的1/2
-XX:PermSize=1024m -XX:MaxPermSize=1024m 设置永久代(非堆内存)初始值和最大值为一样大,一般设置为物理内存的1/4
初始值和最大值设置为一样大的原因:可以减少GC(垃圾回收)的次数和内存伸缩带来的频繁内存申请,从而减少一定的系统开销-Xmn768m 设置JVM堆内存新生代的大小,一般设置为堆内存的3/8
-XX:ParallelGCThreads=2 设置并行GC的线程数,提高垃圾回收效率
-XX:+HeapDumpOnOutOfMemoryError -
XX:HeapDumpPath=/usr/local/tomcat/temp/oom.hprof 设置java应用进程发送OOM异常退出会进行DUMP备份
-XX:+DisableExplicitGC 禁止调用System.gc()方法,防止误调用gc方法导致系统的 JVM 大起大落而使系统响应效率严重降低