mat 内存分析 Linux,使用MAT分析内存泄露

对于大型服务端应用程序来说,有些内存泄露问题很难在测试阶段发现,此时就需要分析JVM Heap Dump文件来找出问题。随着单机内存越来越大,应用heap也开得越来越大,动辄十几G的Dump也不足为奇了。要快速分析,快速定位问题就必须有给力的工具帮忙,下面我来介绍下常用内存分析工具。

内存分析工具

jmap

JDK自带的一个工具,是JVM Heap导出的必备工具。

jmap -dump:format=b,file=xxx.bin pid   pid是java程序pid

此命令会将虚拟机heap镜像导成文件。不过jmap也有直接分析功能:jmap –histo pid,如下图。优点是可以直接查看对象的大小和类型,缺点是无法查看详细的对象引用信息。

mat1.jpg

jhat

JDK自带的dump文件分析工具,会启动一个webserver,可以直接浏览对象大小、类型及对象引用信息。缺点是对于动辄几十G的dump文件力不从心,分析时间长而且web界面会因为对象太多而无响应或者OOM。

jhat  -J-mx512m -port xxx.bin  -mx512m表示所用最大内存512m

MAT

Eclipse Memory Analyzer是一个非常好用的内存dump文件分析工具,我们可以利用它的Eclipse 插件轻松实现查看对象树、对象大小、生成报告,甚至自动化分析可能出现泄露的对象。关于MAT的使用介绍可以参考: http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ma/index.html?ca=drs-。 文章中的例子是在windows平台下分析,对于非常大的dump文件就无能为力了。

Linux 下使用MAT 对于非常大的dump文件MAT同样有办法分析,有下面几个步骤:

Step 1:下载MAT的Stand-alone Eclipse RCP Applications,下载地址: http://www.eclipse.org/mat/downloads.php。在“Stand-alone Eclipse RCP Applications”中找到适合自己的版本。找一台足够大内存的linux机器,将MAT复制上去。

Step 2:进入mat所在目录,编辑MemoryAnalyzer.ini文件设置最大内存值比如-Xmx9g。

Step 3:执行./ParseHeapDump.sh xxxx.bin 来分析dump文件,MAT的分析速度还是很快的。最终得到以下文件。

mat2.jpg

Step 4:将分析得到的文件包括原dump文件下载回windows平台,打开eclipse插件使用菜单File–>Open Heap Dump打开dump文件即可查看到分析结果。

MAT中我们最常用的是Dominator Tree(List the biggest objects and what they keep alive.)功能来分析较大的objects以及他们之间的引用关系,确定一些对象为什么不会被gc。比如从下面两张图中就可以看出,在两个前后两次的dump文件中HConnectionManager$HConnectionImplementation对象越来越大,这里就有OOM的风险。 mat3.jpgmat4.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MAT (Memory Analyzer Tool) 是一款Java内存分析工具,用于帮助开发人员识别和解决Java应用程序中的内存问题。下载MAT可以通过以下步骤进行: 1. 打开Eclipse IDE或访问Eclipse官方网站(https://www.eclipse.org/mat/)。 2. 在"Eclipse Downloads"页面中,选择适合您操作系统的Eclipse版本,然后点击"Download"按钮。 3. 完成下载后,解压缩下载的文件,然后打开Eclipse IDE。 4. 在Eclipse IDE中,选择 "Help" 菜单,然后点击 "Eclipse Marketplace"。 5. 在"Eclipse Marketplace"窗口中,搜索 "Memory Analyzer"。 6. 从搜索结果中,选择 "Memory Analyzer" 插件,并点击 "Go to Marketplace"。 7. 在新打开的网页上,点击 "Install"按钮,并按照提示完成插件的安装。 8. 插件安装完成后,重新启动Eclipse IDE。 MAT下载完成后,可以通过以下步骤进行内存分析: 1. 在Eclipse IDE中,打开已经运行的Java应用程序的Heap Dump文件(以"hprof"扩展名结尾)。 2. 选择 "File" 菜单,然后点击 "Open Heap Dump"。 3. 在弹出的对话框中,浏览并选择相应的Heap Dump文件,然后点击 "Open"。 4. MAT将会加载并分析Heap Dump文件,这可能需要一些时间,取决于文件的大小。 5. 在MAT分析结果视图中,可以通过不同的选项和功能来识别内存问题,比如查找内存泄漏、查看对象实例、查看对象引用关系等。 6. 根据分析结果,可以采取相应的措施来优化内存使用,并解决应用程序的内存问题。 通过使用MAT工具进行内存分析,开发人员可以更好地理解Java应用程序的内存使用情况,并定位和修复潜在的内存问题,从而提高应用程序的性能和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值