1. 优化Tomcat线程池配置
线程池是Tomcat处理并发请求的核心资源,合理的参数设置能显著提升并发能力。需调整的关键参数包括:
server.xml的Connector标签中添加):<Connector executor="tomcatThreadPool"
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="200"
minSpareThreads="50"
acceptCount="300"
maxIdleTime="30000"/>
同时,可通过Executor标签定义共享线程池,供多个Connector复用,减少线程创建开销。
2. 调整连接器(Connector)运行模式
Tomcat默认使用BIO(阻塞I/O)模式,性能较低,建议切换至NIO(非阻塞I/O)或APR(本地库加速)模式:
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443"/>
apr-util、tomcat-native),利用操作系统原生I/O提升性能,适合高负载生产环境。配置示例如下:<Connector port="8080"
protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443"/>
切换模式后需重启Tomcat生效。
3. 优化JVM参数
JVM内存管理和垃圾回收直接影响Tomcat性能,需合理配置:
-Xms(初始堆大小)和-Xmx(最大堆大小)设置,建议两者相等(如-Xms2048m -Xmx2048m),避免堆内存动态调整带来的停顿。-XX:+UseG1GC开启,相比传统ParallelGC,G1GC能减少Full GC次数,提高吞吐量。-XX:NewRatio设置(如-XX:NewRatio=2表示新生代占堆的1/3),根据应用对象生命周期调整(如短生命周期对象多则增大新生代)。catalina.sh或setenv.sh中添加):export JAVA_OPTS="-Xms2048m -Xmx2048m -XX:+UseG1GC -XX:NewRatio=2 -XX:ParallelGCThreads=4"
4. 操作系统级调优
操作系统参数需配合Tomcat优化,提升系统级并发能力:
/etc/security/limits.conf,添加以下内容:* soft nofile 65536
* hard nofile 65536
/etc/sysctl.conf,优化网络缓冲区和TCP连接复用:net.core.somaxconn = 65535 # 监听队列最大长度
net.ipv4.tcp_tw_reuse = 1 # 复用TIME_WAIT状态的连接
net.ipv4.tcp_tw_recycle = 1 # 快速回收TIME_WAIT连接(注意:Linux 4.12+已移除)
执行sysctl -p使配置生效。5. 启用压缩功能
启用Gzip压缩可减少响应数据量(如HTML、JSON),降低网络传输时间。在server.xml的Connector标签中添加以下配置:
<Connector ...
compression="on"
compressableMimeType="text/html,text/xml,application/json,text/plain"
compressionMinSize="1024"/>
compression="on":开启压缩。compressableMimeType:指定需要压缩的MIME类型。compressionMinSize:最小压缩阈值(字节),小于该值的响应不压缩。6. 调整Keep-Alive设置
Keep-Alive允许客户端复用TCP连接,减少连接建立的开销,但需合理配置避免资源占用:
<Connector ...
keepAliveTimeout="15000"
maxKeepAliveRequests="200"/>
7. 使用缓存优化
缓存静态资源和频繁访问的数据,减少重复计算和磁盘IO:
web.xml中配置缓存过滤器,对图片、CSS、JS等静态资源设置过期时间(如1小时):<filter>
<filter-name>ExpiresFilter</filter-name>
<filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
<init-param>
<param-name>ExpiresByType image</param-name>
<param-value>access plus 1 hours</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ExpiresFilter</filter-name>
<url-pattern>*.jpg</url-pattern>
<url-pattern>*.png</url-pattern>
</filter-mapping>
8. 监控与持续调优
通过监控工具实时跟踪Tomcat性能,定位瓶颈并调整参数:
maxThreads占用率)、JVM内存使用率(堆内存、GC次数)、CPU利用率、网络吞吐量(netstat -antp查看连接数)。