要查看Tomcat的GC信息,需先通过修改启动脚本配置GC日志参数。进入Tomcat安装目录的bin文件夹,编辑catalina.sh文件(使用vim或nano等工具):
sudo vim /usr/local/tomcat/bin/catalina.sh
在文件顶部(确保在其他JAVA_OPTS设置之后)添加以下JVM参数(根据需求调整路径和参数值):
JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx1024m -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/tomcat/gc.log"
参数说明:
-Xms512m:设置JVM初始堆内存为512MB;-Xmx1024m:设置JVM最大堆内存为1024MB;-XX:+UseG1GC:启用G1垃圾收集器(适用于Java 9及以上版本,若使用Java 8可替换为-XX:+UseConcMarkSweepGC);-XX:+PrintGCDetails:打印GC详细信息(包括回收类型、耗时、堆内存变化等);-XX:+PrintGCDateStamps:在GC日志中添加时间戳(便于定位时间点);-Xloggc:/var/log/tomcat/gc.log:指定GC日志的输出路径(需确保目录存在且有写入权限)。保存并退出编辑器。
若指定的GC日志目录(如/var/log/tomcat/gc)不存在,需先创建并设置权限:
sudo mkdir -p /var/log/tomcat/gc
sudo chown -R tomcat:tomcat /var/log/tomcat/gc # 假设Tomcat用户为tomcat
重启Tomcat服务使配置生效:
sudo systemctl restart tomcat
若使用旧版本SysVinit,可使用:
sudo service tomcat restart
GC日志会输出到指定的文件中(如/var/log/tomcat/gc.log),可通过以下命令实时查看最新日志:
tail -f /var/log/tomcat/gc.log
日志内容示例:
2025-09-28T14:30:45.123+0800: [GC (Allocation Failure) [G1 Evacuation Pause] (young) 4096K->1024K(16384K), 0.0012345 secs]
2025-09-28T14:30:46.456+0800: [Full GC (System.gc()) 8192K->2048K(32768K), 0.0034567 secs]
日志字段解读:
2025-09-28T14:30:45.123+0800:GC发生的UTC时间(带时区);[GC (Allocation Failure):GC类型(Minor GC或Full GC)及触发原因(如年轻代空间不足);[G1 Evacuation Pause]:使用的GC算法(如G1的疏散暂停);(young):GC作用的堆区域(年轻代、老年代或元空间);4096K->1024K(16384K):GC前年轻代使用量->GC后年轻代使用量(年轻代总容量);0.0012345 secs:GC耗时(秒)。若需更直观地分析GC频率、耗时、内存回收效率等,可使用以下工具:
jstat -gcutil <Tomcat进程ID> 1000 10
参数说明:<Tomcat进程ID>通过ps -ef|grep tomcat获取;1000表示每1秒刷新一次;10表示刷新10次。输出结果包括各堆区域的使用率、GC次数、耗时等。通过以上步骤,即可在Ubuntu Tomcat日志中查看并分析GC信息,帮助定位内存泄漏、GC频繁等问题。