性能测试--内存泄露

内存分析工具(Memory Analyzer Tool,MAT)分析java项目内存泄露

3.1 安装MAT
MAT是有两种安装方式的,这一点与其他eclipse插件略有不同。

一种安装方式是将MAT当做eclipse的插件进行安装:启动Eclipse --> Help --> Eclipse Marketplace,然后搜索Memory Analyzer,安装,重启eclipse即可。

另外一种安装方式是将MAT作为一个独立的软件进行安装:去官网http://www.eclipse.org/mat/downloads.php,根据操作系统版本下载最新的MAT。下载后解压就可以运行了。
在这里插入图片描述
3.2 修改MAT配置
MAT 软件版本解压后目录内有个MemoryAnalyzer.ini文件,该文件里面有个Xmx参数,该参数表示最大内存占用量,默认为1024m,根据堆转储文件大小修改该参数即可。

  1. MemoryAnalyzer.ini中的参数一般默认为-vmargs– Xmx1024m,这就够用了。假如你机器的内存不大,改大该参数的值,会导致MemoryAnalyzer启动时,报错:Failed to create the Java Virtual Machine。
    2.当你导出的dump文件的大小大于你配置的1024m(说明1中,提到的配置:-vmargs– Xmx1024m),MAT输出分析报告的时候,会报错:An internal error occurred during: "Parsing heap dump from XXX”。适当调大说明1中的参数即可。

3.3 获取堆转储文件
获取堆转储文件我尝试过两种方式

第一种方式是采用jamp获取,对于部署到服务器上的程序可以采用这种方式,获取堆转储文件后scp到本地,然后本地分析。获取命令为:
jmap -dump:format=b,file=文件名.hprof 端口号
在这里插入图片描述
3.4 堆转储文件分析
我在实际操作过程中采用的是jmap获取堆转储文件,然后scp到本地,然后MAT软件加载。

加载后首页如下图,在首页上比较有用的是Histogram和Leak Suspects。
在这里插入图片描述
点击Leak Suspects会在堆转储文件同目录内生成一个Leak Suspects.zip文件,同时也会从首页跳转到Leak Suspects页面。
在这里插入图片描述
解压该文件后可以通过浏览器打开分析结果。(.html)

下面是Leak Suspects页面
在这里插入图片描述
在这里插入图片描述
在Leak Suspects页面会给出可能的内存泄露,如上图所示有三个可能的内存泄露,但是只有第一个是我程序里的,另外两个是jar包或jdk里面的,这个可以不用管。
点击Details进入详情页面。在详情页面Shortest Paths To the Accumulation Point表示GC root到内存消耗聚集点的最短路径,如果某个内存消耗聚集点有路径到达GC root,则该内存消耗聚集点不会被当做垃圾被回收。
在这里插入图片描述
在All Accumulated Objects by Class列举了该对象所存储的所有内容。
在这里插入图片描述
为了找到内存泄露,我获取了两个堆转储文件,两个文件获取时间间隔是一天(因为内存只是小幅度增长,短时间很难发现问题)。对比两个文件的对象,通过对比后的结果可以很方便定位内存泄露。
在这里插入图片描述
在这里插入图片描述
我内存泄露位置是一个list,这个list只在这里一直不停的往里添加eventInfo对象,却没有释放过
在这里插入图片描述
修改后代码:
在这里插入图片描述
参考:http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ma/index.html?ca=drs-

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值