Tomcat的主要日志文件为catalina.out,默认位于Ubuntu系统的/var/log/tomcat/(如/var/log/tomcat9/catalina.out)或/opt/tomcat/logs/目录下。该日志记录了Tomcat的运行状态、错误信息及内存相关的关键输出。
使用tail -f命令实时跟踪catalina.out文件的内容,结合grep过滤“memory”“OutOfMemoryError”等关键字,快速定位内存使用异常:
tail -f /var/log/tomcat/catalina.out | grep -i "memory\|OutOfMemoryError" tail -f:实时显示日志新增内容;grep -i:忽略大小写匹配关键字(如“Memory”“outofmemoryerror”);GC日志反映了内存回收的频率、耗时及堆内存的变化,是判断内存使用是否合理的重要依据。需先在catalina.sh(位于/etc/default/tomcat或/opt/tomcat/bin/)中启用GC日志:
JAVA_OPTS="$JAVA_OPTS -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/var/log/tomcat/gc.log" -verbose:gc:开启GC日志;-XX:+PrintGCTimeStamps:显示GC发生的时间戳;-XX:+PrintGCDetails:打印GC详细信息(如新生代、老年代回收情况);-Xloggc:指定GC日志文件路径(如/var/log/tomcat/gc.log)。启用后,通过tail -f /var/log/tomcat/gc.log查看GC日志,重点关注:
DefNew)及耗时;Full GC)及耗时(频繁Full GC可能提示内存不足);[Eden: 1024K->0K(1024K)], [Survivor: 0K->512K(512K)], [Old: 5120K->4096K(8192K)])。内存溢出(OutOfMemoryError)是Tomcat内存使用的常见异常,可通过grep命令快速定位:
grep -i "OutOfMemoryError" /var/log/tomcat/catalina.out java.lang.OutOfMemoryError: Java heap space”(堆内存溢出)、“java.lang.OutOfMemoryError: Metaspace”(元空间溢出)。若需实时查看内存使用详情(如堆内存、非堆内存、线程数等),可通过JMX(Java Management Extensions)实现:
catalina.sh,添加以下JVM参数启用JMX:JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" sudo systemctl restart tomcat;localhost:9090,在“监视器”选项卡中查看实时内存使用情况(如堆内存的“已使用”“已提交”大小)。ps -ef | grep tomcat确认catalina.out的实际路径;logrotate工具(位于/etc/logrotate.d/tomcat)配置自动轮转,避免日志占用过多磁盘空间。