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)配置自動輪轉,避免日志占用過多磁盤空間。