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