1. 调整Tomcat连接器(Connector)配置
连接器是Tomcat接收请求的入口,其参数直接影响并发处理能力。需重点配置以下参数:
Http11Nio2Protocol
(Tomcat 8+)或Http11NioProtocol
(Tomcat 7及以下),支持非阻塞IO,提升高并发下的吞吐量。false
),避免Tomcat花费时间解析客户端IP对应的域名,减少不必要的开销。on
),并指定压缩的最小大小(如compressionMinSize="2048"
)和可压缩的MIME类型(如compressableMimeType="text/html,text/xml,text/plain,application/json"
),减少网络传输数据量,提升响应速度。2. 优化JVM参数
合理的JVM配置可减少垃圾回收(GC)停顿时间,提升Tomcat的稳定性和吞吐量:
-Xms
)和最大堆内存(-Xmx
)为相同值(如-Xms2048m -Xmx2048m
),避免堆内存动态调整带来的性能损耗。-XX:MetaspaceSize
)和最大元空间(-XX:MaxMetaspaceSize
)(如-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
),防止元空间溢出。-XX:+UseG1GC
),适用于大内存和高并发场景,能有效平衡吞吐量和停顿时间。-XX:+HeapDumpOnOutOfMemoryError
(内存溢出时生成堆转储文件)和-XX:HeapDumpPath
(指定堆转储文件路径),便于排查内存问题。3. 配置线程池(Executor)
通过线程池管理请求处理线程,提升线程复用率和资源利用率:
server.xml
中定义线程池,设置关键参数:
maxThreads
:线程池最大线程数(与连接器中的maxThreads
配合使用)。minSpareThreads
:线程池最小空闲线程数(核心线程数)。maxIdleTime
:线程空闲时间(超过则销毁,如600000
毫秒=10分钟)。name
:线程池名称(需唯一)。executor
属性),例如:<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="50" maxIdleTime="600000"/>
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
线程池配置可避免频繁创建和销毁线程,提升请求处理效率。4. 操作系统层面调优
操作系统的内核参数限制会影响Tomcat的并发连接能力,需调整以下参数:
/etc/security/limits.conf
,添加:tomcat soft nofile 65536
tomcat hard nofile 65536
(tomcat
为Tomcat运行用户,需替换为实际用户名)/etc/sysctl.conf
,添加或修改:net.core.somaxconn = 65535 # 系统允许的最大并发连接数
net.ipv4.tcp_max_syn_backlog = 65535 # SYN队列长度
net.ipv4.ip_local_port_range = 1024 65535 # 本地端口范围
net.ipv4.tcp_tw_reuse = 1 # 允许TCP连接复用(减少TIME_WAIT状态)
net.ipv4.tcp_fin_timeout = 30 # TIME_WAIT状态超时时间(秒)
运行sysctl -p
使配置生效。5. 应用层优化
应用本身的性能瓶颈会直接影响Tomcat的并发处理能力,需从以下方面优化:
maximumPoolSize
设置为20-50),避免数据库成为瓶颈。@Async
注解、消息队列),释放请求线程,提升并发处理能力。6. 负载均衡(可选)
若单台Tomcat服务器无法满足高并发需求,可通过负载均衡将请求分发到多台Tomcat实例:
upstream
模块将请求分发到多个Tomcat服务器(如192.168.1.1:8080
、192.168.1.2:8080
)。upstream tomcat_servers {
server 192.168.1.1:8080;
server 192.168.1.2:8080;
}
server {
listen 80;
location / {
proxy_pass http://tomcat_servers;
}
}
负载均衡可提升系统的整体并发处理能力,同时提高可用性。