Tomcat在CentOS中的性能优化技巧
JVM内存配置是Tomcat性能的基础,不合理的内存设置会导致频繁垃圾回收(GC),严重影响性能。
-Xms
(初始堆大小)和-Xmx
(最大堆大小)参数,将两者设为相同值(如-Xms2G -Xmx2G
),避免JVM因堆内存动态调整导致的性能波动。建议设置为物理内存的70%-80%(需预留内存给系统和其他进程)。-XX:NewRatio
参数设置两者比例(如-XX:NewRatio=2
表示新生代占堆的1/3,老年代占2/3),适合大多数Web应用(IO密集型)。-XX:+UseG1GC
);-XX:+UseParallelGC
)。OutOfMemoryError
。设置-XX:MetaspaceSize
(初始大小,如256M)和-XX:MaxMetaspaceSize
(最大大小,如512M)。catalina.sh
):export JAVA_OPTS="-server -Xms2G -Xmx2G -XX:NewRatio=2 -XX:+UseG1GC -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M"
线程池是处理并发请求的核心,合理的配置能提高并发处理能力,避免线程创建/销毁的开销。
maxThreads
(最大线程数):根据服务器CPU核心数和业务类型调整: minSpareThreads
(最小空闲线程数):保持最小空闲线程数(如maxThreads
的10%-20%,如maxThreads=100
则设为10-20),避免请求到来时频繁创建线程。acceptCount
(等待队列长度):当所有线程都在处理请求时,允许排队的请求数量。设置为maxThreads
的1.5-2倍(如maxThreads=100
则设为150-200),避免请求被拒绝。Executor
(自定义线程池):Tomcat 8.5+支持通过Executor
定义线程池,然后在Connector
中引用,提高线程复用率。server.xml
):<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="200" minSpareThreads="20" maxIdleTime="60000"/> <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" acceptCount="300"/>
连接器负责处理HTTP请求,选择合适的协议和参数能显著提高Tomcat的性能。
org.apache.coyote.http11.Http11NioProtocol
)或NIO2(org.apache.coyote.http11.Http11Nio2Protocol
),支持异步IO,提高并发处理能力。compression="on"
参数启用Gzip压缩,减少网络传输的数据量(适合文本类响应,如HTML、CSS、JS)。可设置compressionMinSize
(启用压缩的最小响应大小,默认2KB)和compressableMimeType
(需要压缩的MIME类型,如text/html,text/css,application/javascript
)。server.xml
中的AJP配置,减少资源消耗。server.xml
):<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" compression="on" compressionMinSize="8192" compressableMimeType="text/html,text/css,application/javascript" enableLookups="false" URIEncoding="UTF-8"/>
操作系统的配置直接影响Tomcat的性能,需调整内核参数和文件描述符限制。
nofile
)较低(如1024),会导致Tomcat无法处理大量并发连接。编辑/etc/security/limits.conf
文件,添加以下内容:* soft nofile 65536 * hard nofile 65536
使每个用户的文件描述符限制提高到65536。/etc/sysctl.conf
文件,添加以下参数,提高网络性能:net.core.somaxconn = 65535 # 监听端口的最大连接队列长度 net.ipv4.tcp_tw_reuse = 1 # 允许重用TIME_WAIT状态的连接 net.ipv4.tcp_tw_recycle = 1 # 快速回收TIME_WAIT状态的连接(注意:在某些场景下可能导致连接问题,需根据实际情况调整) net.ipv4.tcp_max_syn_backlog = 65535 # SYN队列长度
执行sysctl -p
使配置生效。/etc/rc.local
文件,添加以下内容:echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag
重启服务器使配置生效。缓存能减少重复计算和磁盘IO,提高响应速度。
Cache-Control
、Expires
),让浏览器缓存静态资源(如图片、CSS、JS),减少对Tomcat的请求。server.xml
中配置URIEncoding="UTF-8"
,避免URL编码问题;设置maxHttpHeaderSize
(HTTP请求头最大大小,默认8KB),根据实际情况调整(如需要处理大请求头,可设为16KB)。/manager
、/host-manager
),若不需要可通过删除或注释webapps
目录下的对应应用,减少资源消耗。server.xml
的Connector
中添加server=" "
参数,隐藏Tomcat版本,减少安全风险(如<Connector ... server="Apache">
)。jconsole
、VisualVM
)或第三方工具(如Prometheus+Grafana)监控Tomcat的性能指标(如线程池使用率、内存消耗、GC频率),及时发现性能瓶颈。