java项目内存分析jmap命令+MAT工具

一.分析背景

在服务器上运行java项目服务时,由于服务所实现的功能导致每个项目在消耗服务器系统内存上有所差异。如果在项目中某个功能模块中作了不良好的操作导致占用的资源未能及时释放就会导致内存泄露,服务无法运行。为了排查这个问题,除了人工检查代码外,还可以通过外部工具锁定问题代码的位置。

二.解决问题

命令

使用命令 jmap ——JDK自带的内存占用检测工具
例如以下命令是输出指定java服务占用内存排名前20的类 :

 jmap -histo 服务进程号 | head -20

在这里插入图片描述
但是无法具体分析具体代码内容。如果想要具体的分析则需要将服务器上指定项目的堆转储文件获取下来,在使用分析工具进行分析这里使用的是MAT(Memory Analyse Tool)。
使用jamp命令:

jmap -dump:format=b,file=dump.hprof(文件名) 服务进程号

将堆转储文件生成至当前目录然后再下载到本地。

工具

下载链接
在eclipse也可以作为插件使用,但是要导入对存储文件则需要单独作为软件使用。因为我们要在自己电脑上打开从服务器下载的堆转储文件。所以选择windos版本的下载。下载后直接解压如图:
在这里插入图片描述
直接双击MemoryAnalyzer就可以打开工具(必要的话可以修改下配置文件MemoryAnalyzer.ini,修改里面的参数如-Xmx5120m(最好要大于你的堆转储文件))。

分析

使用工具打开转储文件,最好将文件单独放在一个文件夹再打开。因为解析文件的过程会在打开的目录下产生其他额外文件。同时会在堆转储文件的同级目录下生成一个压缩文件filename_Leak_Suspects.zip,里面是一个html静态页面,我们也可以在浏览器去分析。
选择 ‘Leak Suspects’ 会显示MAT它自己认为有问题的内容。
分析结果:
在这里插入图片描述
在这里插入图片描述
如果显示的可能出现内存泄漏中有你写的代码对应的类,就可以定位,一层一层找出问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值