风中小郎君

导航

如何检测java程序内存泄漏

内存泄漏常常发生在产品上线运行时,常常会随着时间的不断累积对象得不到释放而不断地增加内存,最后导致内存溢出

  1. 1.打开/tomcat_home/bin/catalina.bat文件

    2.加上:set JAVA_OPTS=%JAVA_OPTS% -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\heapdump,这样当内存溢出是就会在对应路径下生成dump文件

    如何检测java程序内存泄漏
  2.  

    运行程序打开jdk bin 文件夹下再带的 jvisualvm.exe

    如何检测java程序内存泄漏
  3.  

    选择tomcat线程,打开实时监控页面可以看到对应的堆栈线程和装在类,内存的实时情况

    如何检测java程序内存泄漏
  4.  

    运行程序打开jdk bin 文件夹下再带的 jconsole.exe,可以概览堆栈线程和装在类,内存的全部运行时间情况

    如何检测java程序内存泄漏
  5.  

    下载安装mat,dump分析软件,安装后,点击file open 导入dump文件

    如何检测java程序内存泄漏
  6.  

    打开后,灰色区域为可能发生内存溢出的区域,下带问题描述

    如何检测java程序内存泄漏
  7.  

    选择Histogram,点击shallow列进行排序,找出实例最多的

    如何检测java程序内存泄漏
  8.  

    右键实例最的选择list objects-with incoming references,可在根据正则表达式输入自己想查的类,搜索,后右键打开 path to gc root-exclude phantom/weak/soft etc. references 就可以查出 调用为回收的相关信息。

    如何检测java程序内存泄漏
    如何检测java程序内存泄漏

    通过Eclipse市场安装 方法/步骤

     
    1.  

      打开Eclipse - >help - > Eclipse Marketplace

      Eclipse安装MAT插件
    2.  

      点击install,等待下面的进度条加载完毕后,勾选全部,点击Next

      Eclipse安装MAT插件
    3.  

       同意协议后,点击Finish就开始安装MAT了

      Eclipse安装MAT插件
    4.  

     

    一.安装

    首先,你得有一个Eclipse(因为MAT是Eclipse的插件)
    然后,你要在Eclipse上安装MAT,步骤如下:
    1.点击Help,Install New Soft,就出现了以下Install界面:然后我们点击ADD,在弹出的框中填上Mat插件的地址:http://download.eclipse.org/mat/1.6/update-site/,确定后,
    点击Select All,点击Next,之后就一直确定,就能安装了。安装之后需要重启Eclipse.
     

    二.MAT导入文件

    1.打开DDMS
    2.选中要分析的应用
    3.点击Update Head按钮和Dump HPROF file按钮(这里要等一会儿)
    4.选择你要存储的位置,存储hprof文件
    5.将.hprof文件进行转换,转换的方法:将.hprof文件拷贝到PC上的/ANDROID_SDK/tools目录下,并输入命令hprof-conv xxx.hprof yyy.hprof,其中xxx.hprof为原始文件,yyy.hprof为转换过后的文件。转换过后的文件自动放在/ANDROID_SDK/tools目录下。
    6.将转换后的文件拖入Eclipse中
    7.可以看到以下界面。
     

    三.MAT分析文件

    1.Histogram操作:列出每个类实例的数量
    点击Action下的Histogram,得到以下结果
    我们可以在第一行输入进行正则匹配:
    可以选中某一条点击右键进行更多的操作
    比较重要的一点,右键出来选中List Objects,得到的结果再右键选中"Paths to GC Roots",我们可以通过它快速找到GC ROOT.如果存在GC ROOT,它就不会被回收。
     
     
    感谢:http://blog.csdn.net/caiwenfeng_for_23/article/details/23210103
    http://www.cnblogs.com/0616--ataozhijia/p/3954423.html

    注意事项

     
    • 内存泄漏检测一定要注意代码的的规范性,减少冗余代码

posted on 2017-11-23 11:20  风中小郎君  阅读(367)  评论(0)    收藏  举报