Ubuntu中Tomcat的JVM参数调优指南
catalina.sh)JVM参数调优的核心是通过catalina.sh(Tomcat bin目录下)配置内存、垃圾回收及线程相关参数,提升Tomcat的稳定性和性能。
-server参数,针对多CPU环境优化JVM性能,提升吞吐量。-Xms)和最大堆(-Xmx),建议两者值相等(避免堆扩展带来的性能损耗),大小根据服务器物理内存调整(一般不超过物理内存的80%,如16GB内存可设为-Xms8g -Xmx8g)。-XX:NewRatio设置(如-XX:NewRatio=2表示新生代:老年代=1:2),新生代存放短期对象,老年代存放长期对象,根据应用对象生命周期调整(短期对象多则增大新生代)。-XX:PermSize(初始永久代)、-XX:MaxPermSize(最大永久代);Java 8及以上用-XX:MetaspaceSize(初始元空间)、-XX:MaxMetaspaceSize(最大元空间,默认无上限,建议设置上限避免内存泄漏,如-XX:MaxMetaspaceSize=256m)。-Xss设置每个线程的栈大小(如-Xss256k),默认1MB,减小栈大小可增加线程数(适用于高并发场景),但过小会导致栈溢出。垃圾回收(GC)是影响Tomcat性能的关键因素,需根据应用特点选择合适的GC算法:
-XX:+UseG1GC启用,自动管理内存分区,平衡吞吐量和延迟。可调整-XX:MaxGCPauseMillis(目标最大GC停顿时间,默认200ms)和-XX:G1HeapRegionSize(分区大小,默认自适应)。-XX:+UseConcMarkSweepGC启用,但Java 14已移除,需注意兼容性。-XX:+UseParallelGC(新生代)和-XX:+UseParallelOldGC(老年代)启用,通过-XX:ParallelGCThreads设置并行GC线程数(默认等于CPU核心数)。通过GC日志分析内存使用和GC频率,定位性能瓶颈:
在JAVA_OPTS中添加以下参数,将GC日志输出到指定文件:
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/tomcat/logs/gc.log
使用工具(如VisualVM、MAT、JConsole)分析gc.log,关注Full GC频率、老年代占用率等指标,若Full GC频繁,需调整堆大小或GC算法。
server.xml)Tomcat的线程池决定了并发处理能力,需根据服务器CPU核心数和业务负载调整:
在server.xml的<Connector>标签中设置:
maxThreads:最大线程数(默认200),建议设置为CPU核心数的2-4倍(如4核CPU设为8-16),不宜过大(会导致CPU上下文切换开销增大)。minSpareThreads:最小空闲线程数(默认25),保持一定数量的空闲线程,避免请求到来时创建线程的开销。acceptCount:等待队列长度(默认100),当所有线程都在处理请求时,新请求进入队列,队列满则拒绝请求,建议设置为maxThreads的1.5倍(如maxThreads=200则设为300)。通过ulimit命令调整系统对Tomcat的资源限制,避免因资源不足导致性能瓶颈:
ulimit -n 65535(临时生效)或修改/etc/security/limits.conf(永久生效,添加* soft nofile 65535和* hard nofile 65535)。ulimit -u 65535(临时生效)或修改/etc/security/limits.conf(添加* soft nproc 65535和* hard nproc 65535)。server.xml中设置enableLookups="false"(禁用域名反查,减少DNS查询开销)、compression="on"(启用HTTP压缩,减少网络传输量,适用于文本类响应)。connectionTimeout="20000"(连接超时时间,默认20秒),根据业务需求调整(如长连接可适当增大)。webapps目录下的示例应用(如ROOT、examples),减少不必要的资源占用。