1. JVM内存优化:合理分配堆内存与选择垃圾回收器
JVM内存配置是Tomcat性能的基础,直接影响应用的稳定性和响应速度。需根据服务器物理内存大小调整以下参数(建议设置在catalina.sh文件开头):
-Xmx的1/4(如-Xmx2048m则-Xmn512m),优化年轻代垃圾回收效率;PermSize(默认32M),JDK 8后用MetaspaceSize(默认21M),根据应用类数量调整(如-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m),避免PermGen space溢出。-XX:+UseG1GC);-XX:+UseParallelGC)。2. 线程池调优:匹配并发需求与资源利用率
线程池是Tomcat处理并发请求的核心,需根据应用类型(CPU/IO密集型)调整server.xml中的<Connector>参数:
maxThreads的10%-20%,如maxThreads=100则设为10-20);maxThreads的1.5-2倍,如maxThreads=100则设为150-200),超过则拒绝请求;protocol="org.apache.coyote.http11.Http11NioProtocol");apr、tomcat-native,添加protocol="org.apache.coyote.http11.Http11AprProtocol")。3. Linux内核参数优化:提升网络与文件处理能力
调整Linux内核参数可优化Tomcat的网络性能和资源利用率:
sudo sysctl -w net.core.rmem_max=1310720(接收缓冲区1.25M)、sudo sysctl -w net.core.wmem_max=1310720(发送缓冲区1.25M);tcp_tw_reuse(允许复用处于TIME-WAIT状态的连接),执行sudo sysctl -w net.ipv4.tcp_tw_reuse=1;FIN_WAIT2状态的超时时间(默认60秒),执行sudo sysctl -w net.ipv4.tcp_fin_timeout=30;sudo sysctl -w net.ipv4.tcp_syncookies=1;ulimit -n 65535(临时生效),并修改/etc/security/limits.conf(永久生效,添加* soft nofile 65535、* hard nofile 65535)。4. 静态资源优化:减少Tomcat处理负担
静态资源(图片、CSS、JavaScript、字体等)的处理会消耗Tomcat的CPU和内存,建议将其分离到Web服务器(如Nginx、Apache)或CDN:
server {
listen 80;
server_name example.com;
location /static/ {
alias /path/to/static/files/;
expires 30d; # 缓存30天
}
location / {
proxy_pass http://tomcat_server:8080;
}
}
context.xml中添加:<Context>
<Resources cachingAllowed="true" cacheMaxSize="100000" /> <!-- 缓存10万个资源 -->
</Context>
server.xml中配置:<Connector ... compression="on" compressableMimeType="text/html,text/xml,text/javascript,text/css,application/json" />
5. 禁用不必要功能:减少资源消耗
关闭Tomcat中不需要的功能,降低系统开销:
enableLookups="false"(默认true),在server.xml的<Connector>中添加:<Connector ... enableLookups="false" />
server.xml中的AJP Connector(避免不必要的端口监听);server.xml中设置autoDeploy="false"(默认true);web.xml中添加:<session-config>
<session-timeout>30</session-timeout> <!-- 30分钟 -->
</session-config>
6. 监控与持续调优:基于数据优化
性能调优需持续监控指标,根据数据调整配置:
jconsole、VisualVM)监控线程池(活跃线程数、峰值)、内存(堆使用率、GC频率)、连接器(请求处理时间、队列长度);使用Prometheus+Grafana搭建可视化监控系统(收集Tomcat metrics);server.xml中<Valve className="org.apache.catalina.valves.AccessLogValve">),分析请求响应时间、错误率;maxThreads后,观察QPS和响应时间的变化)。