如何提高Ubuntu Tomcat并发处理能力
连接器是Tomcat处理HTTP请求的核心组件,其配置直接影响并发性能。需重点调整以下参数:
server.xml中配置:<Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000" redirectPort="8443"
maxThreads="300" acceptCount="1000"/>
NIO通过事件驱动模型减少线程阻塞,更适合高并发场景;HTTP/2支持多路复用,降低连接开销。maxThreads(最大线程数)、minSpareThreads(最小空闲线程数)、acceptCount(请求队列长度)。
maxThreads:根据服务器CPU核心数和任务类型调整(CPU密集型建议2×核心数,IO密集型建议5×核心数),例如4核服务器可设为200-300。acceptCount:当所有线程忙碌时,允许排队的请求数量,建议设置为maxThreads的1.5-2倍,避免请求被拒绝。enableLookups(域名反查),减少DNS查询延迟;开启compression(压缩),减小响应数据量(如compression="on",compressableMimeType="text/html,text/xml,text/javascript")。JVM性能直接影响Tomcat的并发处理能力,需优化内存分配和垃圾回收:
catalina.sh(或setenv.sh)设置堆内存大小,避免频繁GC。例如:export JAVA_OPTS="-server -Xms2048m -Xmx4096m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
-Xms(初始堆)和-Xmx(最大堆)设置为相同值,避免堆扩容带来的性能波动;export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
G1GC通过分区回收减少停顿时间,适合高并发应用。Linux系统参数限制会影响Tomcat的并发连接能力,需调整以下关键参数:
/etc/security/limits.conf,添加:* soft nofile 65535
* hard nofile 65535
编辑/etc/pam.d/common-session和/etc/pam.d/common-session-noninteractive,添加:session required pam_limits.so
使设置生效:ulimit -n 65535。/etc/sysctl.conf,添加:net.core.somaxconn=4096 # 系统最大连接队列长度
net.ipv4.tcp_max_syn_backlog=4096 # 半连接队列大小
net.ipv4.tcp_tw_reuse=1 # 复用TIME_WAIT连接
net.ipv4.tcp_fin_timeout=30 # TIME_WAIT连接超时时间(秒)
使设置生效:sysctl -p。应用代码的性能瓶颈会直接拖累Tomcat并发能力,需重点优化以下方面:
spring:
datasource:
hikari:
maximum-pool-size: 50 # 连接池最大连接数
minimum-idle: 10 # 最小空闲连接数
idle-timeout: 30000 # 空闲连接超时时间(毫秒)
web.xml中配置缓存:<filter>
<filter-name>ExpiresFilter</filter-name>
<filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
<init-param>
<param-name>ExpiresByType image/jpeg</param-name>
<param-value>access plus 1 month</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ExpiresFilter</filter-name>
<url-pattern>*.jpg</url-pattern>
</filter-mapping>
@Async注解或消息队列(如RabbitMQ、Kafka)异步处理,释放Tomcat线程。持续监控Tomcat性能,定位瓶颈并调整配置:
jstack生成线程转储,分析线程阻塞情况;使用jvisualvm或JConsole监控JVM内存、线程状态;使用Apache Benchmark(ab)进行压力测试(如ab -n 1000 -c 100 http://localhost:8080/)。server.xml中配置AccessLogValve),统计请求响应时间、状态码分布,识别慢请求。通过以上步骤的综合优化,可显著提升Ubuntu环境下Tomcat的并发处理能力。需根据服务器硬件配置(CPU、内存)、应用类型(CPU密集型/IO密集型)和实际负载情况进行调整,并通过压力测试验证效果。