【知识积累】使用JProfiler分析dump文件

1、安装JProfiler(本文使用JProfiler11)

链接:https://pan.baidu.com/s/1VBHLIo8hIVGeeLjaBVjcIg 
提取码:q5wl

在JProfiler的堆遍历器(Heap Walker)中,你可以对堆的状况进行快照并且可以通过选择步骤下寻找感兴趣的对象。堆遍历器有五个视图:

  • 类 Classes

显示所有类和它们的实例,可以右击具体的类"Used Selected Instance"实现进一步跟踪。

  • 分配 Allocations

为所有记录对象显示分配树和分配热点。

  • 索引 References

为单个对象和“显示到垃圾回收根目录的路径”提供索引图的显示功能。还能提供合并输入视图和输出视图的功能。

  • 时间 Time

显示一个对已记录对象的解决时间的柱状图。

  • 检查 Inspections

显示了一个数量的操作,将分析当前对象集在某种条件下的子集,实质是一个筛选的过程。

2、从服务器上将dump文件拿下来

3、使用JProfiler打开(打开比较久,需耐心等待,千万不要点skip,切记。。。

4、查看Classes

5、查看Reference

5.1、选择一个class或者biggest object

5.2、Use Slected Objects

5.3、Incoming references

  • incoming references

显示这个对象被谁引用

  • outcoming references

显示这个对象引用的其他对象

6、查看

7、查看Graph

8、查看代码

该方法主要用来导出数据报表,可以看出,当list数量太大时,就会导致OOM。

9、扩展

生成Dump文件,JVM启动时添加参数:

#出现 OOME 时生成堆 dump: 
-XX:+HeapDumpOnOutOfMemoryError
#生成堆文件地址:
-XX:HeapDumpPath=/home/xxx/logs/

9.1、linux tomcat

打开/tomcat_home/bin/catalina.sh文件 

JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -server -Xms6144m -Xmx6144m -XX:NewSize=384m -XX:MaxNewSize=450m -XX:PermSize=128m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/zyf/logs"

注:其中不设-XX:HeapDumpPath时,dump出的文件在/tomcat_home/bin目录下

9.2、linux springboot

nohup java -Xms2048m -Xmx2048m -XX:NewSize=384m -XX:MaxNewSize=450m -XX:PermSize=128m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/darren/logs/ -jar test.jar --spring.profiles.active=prod &

9.3、windows tomcat

打开/tomcat_home/bin/catalina.bat文件

set JAVA_OPTS=%JAVA_OPTS% -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\heapdump

猜你喜欢

转载自blog.csdn.net/axin1240101543/article/details/105142141