如何在Tomcat中为Java8 WAR应用配置自定义垃圾回收算法
如何为Tomcat中的WAR应用配置G1GC或CMS GC
别担心,这事儿其实挺简单的!和Jar包直接加JVM参数的思路一致,只是需要把GC配置加到Tomcat的启动参数里就行。下面分几种常见场景给你说明:
1. 通过setenv脚本配置(推荐方式)
Tomcat官方推荐用setenv.sh(Linux/macOS)或setenv.bat(Windows)来自定义JVM参数,这样不会修改Tomcat核心配置文件,后续升级Tomcat时也能轻松保留配置。
具体步骤:
- 找到你的Tomcat安装目录,进入
bin文件夹 - 如果没有
setenv.sh/setenv.bat文件,自己手动创建一个 - 根据你的操作系统添加对应的GC配置:
Linux/macOS(编辑setenv.sh)
# 启用G1GC,可添加停顿时间等调优参数 export CATALINA_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=200 $CATALINA_OPTS" # 如果要启用CMS GC,替换成下面的参数(Java8中CMS仍可用) # export CATALINA_OPTS="-XX:+UseConcMarkSweepGC -XX:+UseParNewGC $CATALINA_OPTS"
Windows(编辑setenv.bat)
# 启用G1GC,可添加停顿时间等调优参数 set CATALINA_OPTS=-XX:+UseG1GC -XX:MaxGCPauseMillis=200 %CATALINA_OPTS% # 如果要启用CMS GC,替换成下面的参数(Java8中CMS仍可用) # set CATALINA_OPTS=-XX:+UseConcMarkSweepGC -XX:+UseParNewGC %CATALINA_OPTS%
小贴士:
CATALINA_OPTS是专门给Tomcat服务进程用的JVM参数,比JAVA_OPTS更合适——因为JAVA_OPTS可能会被其他Java程序共享,容易引发冲突。
2. 服务方式运行Tomcat的配置(Windows服务/Systemd)
如果你的Tomcat是作为系统服务运行的,配置方式略有不同:
Windows服务
- 打开Tomcat的
bin文件夹,运行tomcatw.exe - 切换到
Java标签页 - 在
Java Options输入框里添加-XX:+UseG1GC(或CMS的对应参数),点击确定后重启服务即可
Linux Systemd服务
- 找到Tomcat的systemd服务文件(通常路径为
/etc/systemd/system/tomcat.service) - 在
[Service]段落里添加或修改Environment参数:Environment="CATALINA_OPTS=-XX:+UseG1GC -XX:MaxGCPauseMillis=200" - 重新加载配置并重启服务:
sudo systemctl daemon-reload sudo systemctl restart tomcat
3. 验证配置是否生效
配置完成后重启Tomcat,通过以下方式确认GC是否切换成功:
- 查看Tomcat的
catalina.out日志(在logs文件夹下),搜索关键词Using garbage collector,应该能看到对应GC的信息 - 用
jps -v命令找到Tomcat的进程ID,然后执行jinfo -flags <进程ID>,查看输出里是否有+UseG1GC或+UseConcMarkSweepGC的标记
内容的提问来源于stack exchange,提问作者Indunil Asanka
相关产品推荐
相关产品推荐

