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 " 线程号
最后通过16进制的线程号去堆栈信息中去查看此线程的堆栈信息即可。