前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux如何使用MAT分析dump文件

Linux如何使用MAT分析dump文件

作者头像
伊泽瑞尔
发布2022-06-01 08:19:07
4.2K0
发布2022-06-01 08:19:07
举报
文章被收录于专栏:大数据与知识图谱

人的天职在勇于探索真理。——尼古拉·哥白尼

问题

服务报出如下错误:

代码语言:javascript
复制
nested exception is java.lang.OutOfMemoryError: Java heap space] with root cause
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space

看服务监控:

可用的内存变成0kB了,以前服务是正常的,猜测出现内存泄露。使用Eclipse MAT工具进行分析。

由于服务器限制下载文件大小为50M,dump出来的文件一般都比较大。就算能下载,传输几十G文件效率比较慢。所以使用Linux MAT工具先将文件分析完生成html文件,只有几百K,然后下载到本地用浏览器打开分析。

dump堆

首先使用下面命令找到服务的pid:

代码语言:javascript
复制
jps -l

然后dump出此服务的堆。

代码语言:javascript
复制
jmap -dump:format=b,file=hummer.dump PID

format=b,表示以字节的形式。文件名为hummer.dump。

linux上安装MAT

首先查看服务器信息:

代码语言:javascript
复制
uname -m

然后下载对应版本的MAT,具体版本可以看官网(https://www.eclipse.org/mat/downloads.php)

代码语言:javascript
复制
wget http://eclipse.stu.edu.tw/mat/1.9.0/rcp/MemoryAnalyzer-1.9.0.20190605-linux.gtk.x86_64.zip

unzip MemoryAnalyzer-1.9.0.20190605-linux.gtk.x86_64.zip

修改MAT的内存大小大于dump出来的文件大小

代码语言:javascript
复制
vi MemoryAnalyzer.ini

MAT分析 dump

代码语言:javascript
复制
./ParseHeapDump.sh hummer.hprof org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components

生成3个zip文件,hummer_Leak_Suspects.zip、hummer_System_Overview.zip、hummer_Top_Components.zip。把这三个文件下载到本地用浏览器打开,这三个文件很小,只有几百K。

从hummer_Leak_Suspects可以看出如下信息:

点开详情:

可以看到ArrayList占用了89.84%的内存,再具体到类的代码,进行分析。我这边是因为将同步driver改成异步阻塞之后,查询数据太多将ArrayList撑爆了。具体结合三个文件分析。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据与知识图谱 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • dump堆
  • linux上安装MAT
  • MAT分析 dump
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档