通過Tomcat日志排查內存泄漏可以按照以下步驟進行:
catalina.out
和 localhost.log
等日志文件,尋找內存泄漏的報錯信息或警告。例如,Tomcat會記錄 ThreadLocal
泄漏的警告信息:org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks: The web application [ttt] created a ThreadLocal with key of type [java.lang.ThreadLocal](value [java.lang.ThreadLocal@1201c9a0]) and a value of type[tt.zzz.loghelper.model.ActionLog] (value []), but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
top
或 htop
實時查看內存和CPU使用情況:top -p $(pgrep -f tomcat)
ps -eLf | grep tomcat | wc -l
jmap
命令生成堆轉儲文件:jmap -dump:live,format=b,file=/tmp/heap.hprof $(pgrep -f tomcat)
Eclipse MAT
(Memory Analyzer Tool)或其他堆轉儲分析工具打開堆轉儲文件,分析內存泄漏的原因。MAT可以幫助識別內存泄漏,并提供具體的對象和引用關系信息。-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log
GCViewer
或 GCEasy
解析GC日志。-Xms
、-Xmx
等,以提高系統性能。通過以上步驟,可以有效地在Tomcat日志中定位和解決內存泄漏問題。