java获取镜像内存、dump内存信息

转载网址:

1.https://blog.csdn.net/qingzhong_he2010/article/details/82190721

2.https://blog.csdn.net/blueheart20/article/details/52578439

java获取内存dump的几种方式

1、获取内存详情:jmap -dump:format=b,file=e.bin pid
这种方式可以用 jvisualvm.exe 进行内存分析,或者采用 Eclipse Memory Analysis Tools (MAT)这个工具

2. 获取内存dump:  jmap -histo:live pid
这种方式会先出发fullgc,所有如果不希望触发fullgc 可以使用jmap -histo pid

3.第三种方式:jdk启动加参数:
-XX:+HeapDumpBeforeFullGC 
-XX:HeapDumpPath=/httx/logs/dump
这种方式会产生dump日志,再通过jvisualvm.exe 或者Eclipse Memory Analysis Tools 工具进行分析
 

如何Dump当前Java应用的内存结构,并进行分析找到占用空间最大的Class

2016年09月18日 23:00:42 bladestone 阅读数:9665 标签: JVMMAT内存分析JMAPJPS 更多

个人分类: Java技术

版权声明:本文章是作者辛勤书写的成果,如需转载,请与作者联系,并保留作者信息以及原文链接,谢谢~~ https://blog.csdn.net/blueheart20/article/details/52578439

引言:在Java应用中,对于内存的占用是一个让人头疼的问题,那在我们怀疑内存占用出现问题时,如何找到我们想要的答案,比如哪个占用了最多的内存,本文讲尝试给出一个思路。

1.  如何找到我们关心的进程?

 Option 1:  JPS   

       jps是JDK中自带的工具,帮助我们在系统中之间找到需要的java应用进程信息。

 
  1. bladestone@bladestone-laptop:~$ jps

  2. 3143 WxDemoApplication

  3. 4043 Jps

  4. 32446 org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar

 Option 2:  ps -ef | grep java 

 
  1. bladestone@bladestone-laptop:~$ ps -ef | grep java

  2. bladest+ 5355 5352 0 22:15 pts/1 00:00:00 /usr/bin/java -Dosgi.requiredJavaVersion=1.8 -Xms40m -Xverify:none -Xmx1200m -jar /opt/sts-bundle/sts-3.8.1.RELEASE//plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar -os linux -ws gtk -arch x86_64 -showsplash -launcher /opt/sts-bundle/sts-3.8.1.RELEASE/STS -name STS --launcher.library /opt/sts-bundle/sts-3.8.1.RELEASE//plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.400.v20160518-1444/eclipse_1617.so -startup /opt/sts-bundle/sts-3.8.1.RELEASE//plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar --launcher.overrideVmargs -exitdata 208008 -product org.springsource.sts.ide -vm /usr/bin/java -vmargs -Dosgi.requiredJavaVersion=1.8 -Xms40m -Xverify:none -Xmx1200m -jar /opt/sts-bundle/sts-3.8.1.RELEASE//plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar

  3. bladest+ 5362 4911 0 22:15 pts/1 00:00:00 grep --color=auto java

2. 如何获取内存结构或者内存镜像文件?

 在本地的测试环境下,我们可以基于pid来进行远程调用,直接在工具中MAT或者visualvm中直接进行调试。但是在生产环境上或者远程的服务器上,该如何来获取java应用的内存镜像?

 基于jmap来获取内存镜像,jmat是由jdk自带的命令行工具。

    >>  jmap -dump:live,file=wx.dump 3143

 
  1. bladestone@bladestone-laptop:~$ jmap -dump:live,file=wx.dump 3143

  2. Dumping heap to /home/bladestone/wx.dump ...

  3. Heap dump file created

3.  JMAP命令

 jmap是Java Memory Map的缩写,打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量),可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。

 使用方法 jmap -histo pid。如果使用命令行 jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format=b,file=outfile 3024可以将3024进程的内存heap输出出来到outfile文件里。

 参考资料:http://blog.csdn.net/fenglibing/article/details/6411953

 Offical Reference: https://docs.oracle.com/javase/7/docs/technotes/tools/share/jmap.html

4. 基于MAT进行内存镜像分析

 安装MAT,基于Eclipse的Market来进行安装:

 

 进行内存镜像分析;在安装好MAT之后,首先切换至MAT的perspective视图。

 

打开菜单“文件”,点击Open Dump File,选中前一步骤的dump文件,导入MAT. 进行分析,即可得到如下图示:

 

 关于MAT的使用说明,可以参考如下资料:

 http://www.blogjava.net/rosen/archive/2010/06/13/323522.html

5.总结

 除了MAT之外,还可以使用visualvm来进行内存镜像分析。目前在JDK中已经内置了jvisualvm,其实他们是同一个版本的软件。

 

猜你喜欢

转载自blog.csdn.net/u010730870/article/details/87914073