1、配置jvm啟動參數--宕機前輸出堆轉儲文件和崩潰日志
首先配置jvm啟動參數,找到Tomcat目錄下的catalina.sh文件,改下面這句話:
#JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/dump.bin -XX:+PrintGCDetails -XX:ErrorFile=/data/logs/dump-error.log
宕機前輸出dump堆轉儲文件和崩潰日志:
可以使用jprofiler分析堆轉儲文件或者https://heaphero.io/heap-index.jsp#header 在線分析堆轉儲文件。
2、運行過程中生成堆轉儲文件
執行命令,生成堆轉儲文件:jmap -dump:live,format=b,file=heap-dump.bin
3、分析線程CPU消耗情況
top命令查看Java進程號和Java進程CPU使用情況
查看Java進程中所有線程CPU使用情況:top -p java進程號 -H eg:
top -p 51334 -H
查看堆棧信息:jstack Java進程號
將消耗CPU最高的線程號轉換為16進制:printf "%x\n" 線程號
最后通過16進制的線程號去堆棧信息中去查看此線程的堆棧信息即可。