首先你得有一个dump文件
dump文件获取方式
- vm参数配置
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=c:/heap.bin
- jmap指令
jmap -dump:<dump-options><pid>
比如 jmap -F -dump:live,file=jmap.hprof [PID] 导出内存dump文件
通过Memory Analyzer分析
在overview下整个内存的使用情况:
image.png
在dominator_tree视图下,该视图列举了所有的大内存对象
image.png右击查看代码调用该对象的类
image.png在我的代码里面是这样的情况:
image.png这个map对象占用大量的内存了,到这里问题原因已经找到,接下来结合代码逻辑修改就可以了,很简单的哦!
大家也可以通过ema自动生成Leak Supects Report 视图中查看可能造成OOM的对象分析
image.png
image.png
我这里是有10个大对象
image.png
根据这里给出的地址号去dominator_tree查找对应的被对象,比如这里的
0x6c640b690
image.png
好了,分享结束!!!
网友评论