线程状态跟踪
(1) jps -l
jps命令,查询正在运行的虚拟机java进程,一般显示信息就是,pid和进程名称:
或者输入tasklist,找到java.exe的PID,如下为4268:
(2) jstack
使用jstack [pid] 输出当前进程的堆栈信息。主要有两种使用方式,如下:
将堆栈信息输出到执行文件 jstack [pid] > file,输出pid 4268的进程堆栈信息存储到test文件中,执行命令jstack 4268>E:\test。结果如下:
(3)jconsole
(4)jmap 采集堆内存
jmap -dump:live,format=b,file=E:/dump201612271310.dat 14776
在jdk启动加参数中加: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\dump\ ,然后应用启动后出现内存异常则会自动导出dump文件,默认的文件名是:java_pid<进程号>.hprof。
注意:获取dump文件必须是一出现内存异常就获取dump文件,这样获取的文件信息才比较准确,如果过了一段时间在导出dump文件,就会因gc的缘故,导致信息不准确,所以推荐第二种方式获取dump文件。