1. 线程池配置优化
线程池是Tomcat处理并发请求的核心资源,合理配置可避免线程创建/销毁的开销。在server.xml中定义<Executor>并绑定<Connector>,关键参数设置如下:
maxThreads:线程池最大线程数,需根据服务器CPU核心数(如4核)和应用负载调整,建议设置为CPU核心数×200(如800),避免过多线程导致上下文切换开销;minSpareThreads:最小空闲线程数,保持一定数量的空闲线程以快速响应突发请求,建议设置为50-100;maxQueueSize:等待队列长度,超过此值的请求将被拒绝,建议设置为100-200,避免无限制排队导致内存溢出。<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="50" maxQueueSize="100"/>
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
2. 连接器协议优化
使用高性能连接器提升请求处理能力:
protocol设置为org.apache.coyote.http11.Http11Nio2Protocol(NIO2性能更优),适用于高并发场景;server.xml中添加Http2Protocol连接器(需Tomcat 8.5+)。<Connector port="8443" protocol="org.apache.coyote.http2.Http2Protocol" maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-rsa-key.pem" certificateFile="conf/localhost-rsa-cert.pem" type="RSA"/>
</SSLHostConfig>
</Connector>
3. JVM内存与垃圾回收调优
合理分配JVM内存并选择高效垃圾回收器,避免频繁GC导致的停顿:
-Xms)和最大堆(-Xmx)为相同值(如-Xms2048m -Xmx2048m),避免堆扩容带来的性能波动;元空间(-XX:MaxMetaspaceSize)设置为256m-512m(Java 8+);-XX:+UseG1GC),它通过并发标记和整理减少停顿时间,适合大内存应用;若需低延迟,可调整-XX:MaxGCPauseMillis(如200ms)。catalina.sh或setenv.sh):export JAVA_OPTS="-Xms2048m -Xmx2048m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC"
4. 操作系统内核参数调优
调整Linux内核参数提升网络和文件处理能力:
net.ipv4.tcp_tw_reuse=1)、增加最大并发连接数(net.core.somaxconn=4096)、调整TCP缓冲区大小(net.ipv4.tcp_rmem和net.ipv4.tcp_wmem);ulimit -n 65535),避免高并发时文件描述符耗尽。sudo sysctl -w net.ipv4.tcp_tw_reuse=1
sudo sysctl -w net.core.somaxconn=4096
echo "ulimit -n 65535" | sudo tee -a /etc/security/limits.conf
5. 静态资源与缓存优化
减少Tomcat对静态资源的处理负担:
server.xml的<Connector>中添加compression="on",并指定压缩类型(如compressableMimeType="text/html,text/xml,application/json"),减少网络传输量;Cache-Control: max-age=3600),让浏览器缓存静态资源,减少重复请求。<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" compression="on" compressableMimeType="text/html,text/xml,application/json" redirectPort="8443"/>
6. 禁用不必要功能
关闭Tomcat中未使用的组件,减少资源消耗:
server.xml中的AJP连接器(port="8009");server.xml的<Connector>中添加enableLookups="false",避免Tomcat对客户端IP进行DNS反向解析;<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" enabled="false"/>
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" enableLookups="false" redirectPort="8443"/>
7. 监控与持续调优
使用工具监控Tomcat性能,针对性调整:
-Dcom.sun.management.jmxremote参数),通过JConsole或VisualVM查看线程池状态、内存使用、GC频率等指标;server.xml中<Valve>配置),分析请求响应时间和错误率,定位性能瓶颈;maxThreads)。catalina.sh):export JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"