1. 调整JVM堆内存参数
通过修改Tomcat启动脚本(/path/to/tomcat/bin/catalina.sh或/etc/default/tomcat9,取决于Tomcat版本)中的JAVA_OPTS环境变量,设置合理的堆内存大小。关键参数包括:
-Xms:初始堆内存(如-Xms512m),建议与-Xmx一致以避免频繁扩容;-Xmx:最大堆内存(如-Xmx2048m),通常设置为物理内存的1/4~1/2(需预留系统和其他进程的内存);-XX:MaxMetaspaceSize:元空间最大大小(Java 8+替代永久代,如-XX:MaxMetaspaceSize=256m),避免元空间溢出。export JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=256m"
修改后需重启Tomcat使配置生效。
2. 选择合适的垃圾回收器
针对不同Java版本选择高效的垃圾回收器,提升内存回收效率:
-XX:+UseParallelGC),适合多核CPU环境,提高吞吐量;-XX:+UseG1GC),支持大内存堆(如-Xmx4g以上),并能控制最大GC暂停时间(如-XX:MaxGCPauseMillis=200)。export JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
3. 优化线程池配置
通过server.xml中的Connector元素调整线程池参数,提升并发处理能力:
maxThreads:最大线程数(如200),决定同时处理的请求数量,需根据并发量调整(建议100~500);minSpareThreads:最小空闲线程数(如25),保持线程池的基础活跃线程,避免频繁创建/销毁;acceptCount:请求队列最大长度(如1000),当所有线程繁忙时,新请求进入队列等待,超过则拒绝。<Connector port="8080" protocol="HTTP/1.1"
maxThreads="200" minSpareThreads="25" acceptCount="1000"
connectionTimeout="20000" redirectPort="8443" />
4. 启用HTTP压缩
在server.xml的Connector中添加压缩配置,减少网络传输数据量,降低内存和带宽消耗:
compression="on":启用压缩;compressionMinSize="2048":启用压缩的最小响应大小(单位:字节);compressableMimeType:指定可压缩的MIME类型(如文本、CSS、JS等)。<Connector port="8080" protocol="HTTP/1.1"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,application/json"
maxThreads="200" minSpareThreads="25" acceptCount="1000" />
5. 禁用不必要的功能
通过修改web.xml或server.xml关闭Tomcat的非必要功能,减少内存占用:
web.xml中设置autoDeploy="false"和deployOnStartup="false",避免Tomcat自动扫描和部署应用;context.xml中禁用<ResourceLink>配置。web.xml):<context-param>
<param-name>autoDeploy</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>deployOnStartup</param-name>
<param-value>false</param-value>
</context-param>
6. 监控与调优
使用工具持续监控Tomcat内存使用情况,根据实际负载调整参数:
jmap -heap <pid>查看堆内存详情,top/htop监控进程内存占用;jconsole、VisualVM实时监控内存、线程、GC等情况;注意事项
sudo systemctl restart tomcat9);-Xms/-Xmx比例(如-Xms设置为-Xmx的80%)。