内存溢出定位分析手段

  • Post author:
  • Post category:其他


  1. 获取dump文件有两种方法

    1)通过 jmap 工具生成可以生成任意Java进程的dump文件
# 先找到PID
ps -ef | grep java
# jmap 转存快照
jmap -dump:format=b,file=/opt/dump/test.dump {PID}

2)通过配置JVM启动参数

#  当程序出现OutofMemory时,将会在相应的目录下生成一份dump文件,如果不指定选项HeapDumpPath则在当前目录下生成dump文件

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/dumps
  1. MAT需要JDK11才能运行

解决办法是,打开MAT的安装目录,有一个配置文件MemoryAnalyzer.ini。打开这个文件,在文件中指定JDK版本即可。新增两行配置:

-vm D:/jdkPath/bin/javaw.exe
  1. 在使用jvisualvm分析大的dump文件时,堆查器使用的内存不足

修改JAVA_HOME/lib/visualvm/etc/visualvm.conf文件中 visualvm_default_options=”-J-client -J-Xms24 -J-Xmx256m”,然后重启jvisualVM即可

  1. MAT修改内存空间

分析堆转储文件需要消耗很多的堆空间,为了保证分析的效率和性能,在有条件的情况下,建议分配给 MAT 尽可能多的内存资源。两种方式分配内存资源给 MAT:

1)修改启动参数 MemoryAnalyzer.exe -vmargs -Xmx4g

2)编辑文件 MemoryAnalyzer.ini 添加 -vmargs – Xmx4g

参考的一些文章:

jvisualvm分析:

https://zhuanlan.zhihu.com/p/163774290


MAT定位大对象:

https://www.cnblogs.com/rb2010/p/14741674.html


MAT详细:

https://blog.csdn.net/Jin_Kwok/article/details/80326088



https://www.jianshu.com/p/82b25cf8cfde



版权声明:本文为qq_20408423原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。