Tomcat在CentOS中的性能优化技巧
JVM内存配置是Tomcat性能的基础,不合理的内存设置会导致频繁垃圾回收(GC),严重影响性能。
-Xms(初始堆大小)和-Xmx(最大堆大小)参数,将两者设为相同值(如-Xms2G -Xmx2G),避免JVM因堆内存动态调整导致的性能波动。建议设置为物理内存的70%-80%(需预留内存给系统和其他进程)。-XX:NewRatio参数设置两者比例(如-XX:NewRatio=2表示新生代占堆的1/3,老年代占2/3),适合大多数Web应用(IO密集型)。-XX:+UseG1GC);-XX:+UseParallelGC)。OutOfMemoryError。设置-XX:MetaspaceSize(初始大小,如256M)和-XX:MaxMetaspaceSize(最大大小,如512M)。catalina.sh):export JAVA_OPTS="-server -Xms2G -Xmx2G -XX:NewRatio=2 -XX:+UseG1GC -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M"
线程池是处理并发请求的核心,合理的配置能提高并发处理能力,避免线程创建/销毁的开销。
maxThreads(最大线程数):根据服务器CPU核心数和业务类型调整:
minSpareThreads(最小空闲线程数):保持最小空闲线程数(如maxThreads的10%-20%,如maxThreads=100则设为10-20),避免请求到来时频繁创建线程。acceptCount(等待队列长度):当所有线程都在处理请求时,允许排队的请求数量。设置为maxThreads的1.5-2倍(如maxThreads=100则设为150-200),避免请求被拒绝。Executor(自定义线程池):Tomcat 8.5+支持通过Executor定义线程池,然后在Connector中引用,提高线程复用率。server.xml):<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="200" minSpareThreads="20" maxIdleTime="60000"/>
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" acceptCount="300"/>
连接器负责处理HTTP请求,选择合适的协议和参数能显著提高Tomcat的性能。
org.apache.coyote.http11.Http11NioProtocol)或NIO2(org.apache.coyote.http11.Http11Nio2Protocol),支持异步IO,提高并发处理能力。compression="on"参数启用Gzip压缩,减少网络传输的数据量(适合文本类响应,如HTML、CSS、JS)。可设置compressionMinSize(启用压缩的最小响应大小,默认2KB)和compressableMimeType(需要压缩的MIME类型,如text/html,text/css,application/javascript)。server.xml中的AJP配置,减少资源消耗。server.xml):<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443"
compression="on"
compressionMinSize="8192"
compressableMimeType="text/html,text/css,application/javascript"
enableLookups="false"
URIEncoding="UTF-8"/>
操作系统的配置直接影响Tomcat的性能,需调整内核参数和文件描述符限制。
nofile)较低(如1024),会导致Tomcat无法处理大量并发连接。编辑/etc/security/limits.conf文件,添加以下内容:* soft nofile 65536
* hard nofile 65536
使每个用户的文件描述符限制提高到65536。/etc/sysctl.conf文件,添加以下参数,提高网络性能:net.core.somaxconn = 65535 # 监听端口的最大连接队列长度
net.ipv4.tcp_tw_reuse = 1 # 允许重用TIME_WAIT状态的连接
net.ipv4.tcp_tw_recycle = 1 # 快速回收TIME_WAIT状态的连接(注意:在某些场景下可能导致连接问题,需根据实际情况调整)
net.ipv4.tcp_max_syn_backlog = 65535 # SYN队列长度
执行sysctl -p使配置生效。/etc/rc.local文件,添加以下内容:echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
重启服务器使配置生效。缓存能减少重复计算和磁盘IO,提高响应速度。
Cache-Control、Expires),让浏览器缓存静态资源(如图片、CSS、JS),减少对Tomcat的请求。server.xml中配置URIEncoding="UTF-8",避免URL编码问题;设置maxHttpHeaderSize(HTTP请求头最大大小,默认8KB),根据实际情况调整(如需要处理大请求头,可设为16KB)。/manager、/host-manager),若不需要可通过删除或注释webapps目录下的对应应用,减少资源消耗。server.xml的Connector中添加server=" "参数,隐藏Tomcat版本,减少安全风险(如<Connector ... server="Apache">)。jconsole、VisualVM)或第三方工具(如Prometheus+Grafana)监控Tomcat的性能指标(如线程池使用率、内存消耗、GC频率),及时发现性能瓶颈。