java 内存爆满排查命令

1. top 一下获取内存占用率最高的pid。

2. 转到 jdk的bin目录,执行jdk命令。

(1)./jmap -heap pid  查看JVM空间总体使用情况

(2)./jmap -histo  pid |more  查看类的实例数和内存量

(3)./jmap -histo:live pid |more 查看所有活着的实例数量。

(4)./jmap -dump:format=b,file=dump_tomcat.dat pid 将内存使用情况dump到文件中

3. 使用MAT工具对dump文件进行分析。

下载MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰
富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。
下载地址:http://www.eclipse.org/mat/downloads.php
然后解压,跟eclipse一样,我们直接启动就可以了,启动界面如下,我们点击左上角“file”或者红框中的“Open a Heap Dump”就可以打开我们的Dump文件。
java 内存爆满排查命令

 

 java 内存爆满排查命令

 

 Dump文件后缀问题,找不到Dump文件时选择All file,就可以看到了

java 内存爆满排查命令

 

 2. 选择Leak Suspects Report(泄露嫌疑报告),进入到主界面

java 内存爆满排查命令

 

 3. 看到主界面,Problem区域就是提示可能有问题的类的信息了,我们可以看到,有一个类的实例占了700M左右,占用了内存总量90%以上了,点击Details可以查看详情,点击See stacktrace可以查看跟踪堆栈找到问题代码所在位置。

java 内存爆满排查命令

 

 4. 下图可以看出来这个对象占用了很多的内存

java 内存爆满排查命令

 

java 内存爆满排查命令

 

 当然我们也可以切换视图,查看具体对象的一些信息,可以看到这个class生成了133w个实例,肯定是代码出问题了

java 内存爆满排查命令

 

 

跟踪代码,定位泄露位置

点击See stacktrace,下图是跟踪的代码位置,可以清晰的看到是第几行生成的对象,进而分析代码

 java 内存爆满排查命令

 

 

 

上一篇:JVM 问题分析思路


下一篇:Java内存分析工具MAT