通过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日志中定位和解决内存泄漏问题。