CentOS Tomcat性能调优策略
CentOS下Tomcat性能调优策略
1. 操作系统层优化
1.1 调整文件描述符限制
CentOS默认文件描述符限制(nofile
)过低,会限制Tomcat并发连接数。编辑/etc/security/limits.conf
,添加以下内容:
* soft nofile 65536
(软限制)、* hard nofile 65536
(硬限制),保存后重新登录生效。
1.2 优化内核参数
修改/etc/sysctl.conf
,提升网络并发处理能力:
net.core.somaxconn = 65535 # 监听队列最大长度(需>
=Tomcat的acceptCount)
net.ipv4.tcp_tw_reuse = 1 # 允许复用TIME_WAIT状态的连接
net.ipv4.tcp_max_syn_backlog = 65535 # SYN队列最大长度
net.ipv4.ip_local_port_range = 1024 65535 # 本地端口范围(扩大可用端口数)
执行sysctl -p
使配置生效。
1.3 禁用透明大页(Transparent Huge Pages)
透明大页会导致内存碎片,降低Tomcat性能。编辑/etc/rc.local
,添加以下命令(开机自动执行):
echo never >
/sys/kernel/mm/transparent_hugepage/enabled
echo never >
/sys/kernel/mm/transparent_hugepage/defrag
2. Tomcat配置优化
2.1 线程池调优
通过server.xml
中的<
Executor>
和<
Connector>
配置线程池,合理分配线程资源:
<
Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="500" <
!-- 最大线程数(根据CPU核心数调整,如4核可设200-500) -->
minSpareThreads="50" <
!-- 最小空闲线程数(保持备用线程,应对突发请求) -->
maxQueueSize="100" <
!-- 请求队列最大长度(避免无限制排队)" />
<
Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443" />
说明:maxThreads
需结合CPU核心数(如物理核心数×2+1
)和业务负载调整,避免过大导致线程切换开销。
2.2 连接器协议选择
优先使用NIO(非阻塞I/O)或NIO2(异步I/O)协议,替代默认的BIO(阻塞I/O),提升高并发下的吞吐量:
<
Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
maxThreads="500" connectionTimeout="20000" />
2.3 连接数参数调优
调整<
Connector>
的关键连接数参数,避免连接被拒绝:
maxConnections
:Tomcat能接受的最大连接数(默认10000,可根据服务器资源调整至20000+);acceptCount
:当所有线程忙碌时,允许的最大排队请求数(需> =maxConnections
,如设为1000);connectionTimeout
:连接超时时间(默认20000ms,可根据业务调整至30000ms)。
示例配置:
<
Connector port="8080" protocol="HTTP/1.1"
maxThreads="500" minSpareThreads="50" maxConnections="20000"
acceptCount="1000" connectionTimeout="30000" />
2.4 禁用不必要的功能
- 关闭DNS反查:设置
enableLookups="false"
(避免Tomcat解析客户端IP对应的域名,减少网络开销); - 禁用AJP协议(若未使用Apache等前端服务器):注释
< Connector port="8009" protocol="AJP/1.3"/>
; - 隐藏版本信息:在
server.xml
的< Connector>
中添加server="Apache"
(避免暴露Tomcat版本,提升安全性)。
3. JVM内存调优
3.1 堆内存设置
通过catalina.sh
(或setenv.sh
)设置JVM堆内存,避免频繁Full GC:
export JAVA_OPTS="$JAVA_OPTS -Xms2g -Xmx4g -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g"
说明:
-Xms
(初始堆内存)和-Xmx
(最大堆内存)需设置为相同值(避免堆内存动态调整的开销);- Java 8及以上版本需用
Metaspace
替代PermGen
(永久代),设置MetaspaceSize
和MaxMetaspaceSize
。
3.2 垃圾回收器选择
优先使用G1GC(Garbage-First Garbage Collector),适用于大内存应用,能有效减少GC停顿时间:
export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC"
可选参数:
-XX:MaxGCPauseMillis=200
(设置最大GC停顿时间目标,默认200ms);-XX:InitiatingHeapOccupancyPercent=45
(触发并发GC的堆占用率阈值,默认45%)。
4. 缓存与压缩优化
4.1 启用HTTP响应压缩
通过server.xml
配置Gzip压缩,减少网络传输数据量(适用于文本类响应,如HTML、CSS、JS):
<
Connector port="8080" protocol="HTTP/1.1"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/css,application/javascript" />
说明:compressionMinSize
设置触发压缩的最小响应大小(默认2048字节);compressableMimeType
指定需要压缩的MIME类型。
4.2 静态资源缓存
通过web.xml
配置静态资源(图片、CSS、JS)的缓存策略,减少重复请求:
<
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 month<
/param-value>
<
/init-param>
<
init-param>
<
param-name>
ExpiresByType text/css<
/param-name>
<
param-value>
access plus 1 week<
/param-value>
<
/init-param>
<
/filter>
<
filter-mapping>
<
filter-name>
ExpiresFilter<
/filter-name>
<
url-pattern>
/*<
/url-pattern>
<
/filter-mapping>
5. 监控与维护
5.1 监控工具使用
- JConsole/VisualVM:监控Tomcat的堆内存、线程、GC等情况(本地监控无需额外配置);
- Prometheus+Grafana:搭建实时监控平台,采集Tomcat的
/actuator/prometheus
指标(需Tomcat 9.0+),可视化展示性能趋势。
5.2 日志与分析
- 开启Tomcat访问日志(
server.xml
中配置AccessLogValve
),记录请求时间、响应状态码等信息,分析慢请求; - 定期生成堆转储文件(
jmap -dump:live,format=b,file=heap.hprof < pid>
),使用MAT(Eclipse Memory Analyzer)分析内存泄漏。
5.3 定期重启
对于长期运行的Tomcat,定期重启(如每周一次)可释放内存碎片,避免内存泄漏累积导致的性能下降。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS Tomcat性能调优策略
本文地址: https://pptw.com/jishu/724465.html