一、Jmap
1、查看整个LVM 内存状态
jmap -heap pid
2、查看JVM堆中对象详细占用情况
jmap -histo [pid]
3、导出整个JVM 中内存信息
jmap -dump:format=b,file=文件名 [pid]
二、Jstack
4、JVM 调优 jstack 可以看到JVM 中线程的运行状况 所有堆栈信息;
top -c
jstack [pid]
在对Java内存泄漏进行分析的时候,需要对jvm运行期间的内存占用、线程执行等情况进行记录的dump文件,常用的主要有thread dump和heap dump。
thread dump: 主要记录JVM在某一时刻各个线程执行的情况,以栈的形式显示,是一个文本文件。通过对thread dump文件可以分析出程序的问题出现在什么地方,从而定位具体的代码然后进行修正。thread dump需要结合占用系统资源的线程id进行分析才有意义。
heap dump: 主要记录了在某一时刻JVM堆中对象使用的情况,即某个时刻JVM堆的快照,是一个二进制文件,主要用于分析哪些对象占用了太对的堆空间,从而发现导致内存泄漏的对象。
top -c
查看CPU 资源应用最多的PID进程。 printf "%x " pid号
得到进程PID 的十六进制。 # jstack pid | grep "16进制" -A 10
就可以定位代码查找问题。( -A 10 参数用来指定显示行数)