JVM系列---【如何使用jvisualvm排查OOM问题?】
如何使用jvisualvm排查OOM问题?
1.打印堆日志
- 1.启动时添加jvm参数(推荐)
在启动参数中加入下面的参数,这样会在系统OOM的时候自动打印dump文件,一般生成在项目根目录下,名字一般叫java_pid4545.hprof。
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:\SoftWare\Devtools\dump\log -Xms10m -Xmx10m
#如果不指定-XX:HeapDumpPath=/Users/csh,就会生成到项目根目录下
-Xmx10m -Xms10m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/csh
- 2.使用jvm参数
使用jmap命令拿到当前快照
# 不指定文件生成位置,dump文件就生成在当前目录
jmap -dump:file=[filename] [pid]
#指定文件生成目录
jmap -dump:live,format=b,file=/path-you-want-to-save/java-heap-dump.hprof 89473
2.用工具分析堆快照文件
寻找堆中内存占用最大的类

定位到类对应的具体实例

定位到具体的对象引用

定位到具体的代码

愿你走出半生,归来仍是少年!
浙公网安备 33010602011771号