-
内存分析工具
MAT
的使用
一、
MAT
插件安装
MAT(Memory Analyzer Tool)
是基于
heap dumps
来进行分
析的,它的分析速
度比
jhat
快,分
析结果是图形界面显示,比
java
内置
jhat
的可读性更高
,
通过
Eclipse
市场安装
< br>方法
/
步骤
1
< br>
打开
Eclipse - >help
- > Eclipse Marketplace
2
1
/
17
文档可自由编辑
点击
install
,等待下面的进度条加载完毕后,
勾选全部,点击
Next
3
同意协
议后,点击
Finish
就开始安装
M
AT
了
2
/
17
文档可自由编辑
直接输入
URL
安装
方法
/
步骤
2
1.
2.
打开
Eclipse -
>help
- > Install New
Software
在
work
with
输入图中下载地址,勾选
Memory
Analyzer for
Eclipse
IDE
选项
3.
若没有勾选
Memory
Analyzer for Eclipse IDE
选项,点
击地址栏
旁边的
Add
,在
location
里输入以上地址,点击
OK
p>
即可。
3
/
17
文档可自由编辑
4.
安<
/p>
装
完
成
后
提
示
重
启
Eclipse
,
重
启<
/p>
后
打
开
wind
ow
-
>
open
perspective
,看到
Memory
Analysis
证明安装成功。
4
/
17
文档可自由编辑
二、
MAT
的使用
案例一
问题
线上某一台机器出现异常
.
接口调用的
rt
达到了万级别
..
基本可以判断这
个机器已经挂了
.
进而分析该机器一直在
fgc.
然后马上
< br>dump
内存
,
进而进行分
p>
析
(
中间一些异常的
gc
日志没有截图
).
之前学习的<
/p>
jvm
知识都是纯理论的
,
这
次是实打实线上出现的问题
.
所以记录一下
.
步骤
1
、
先
dump
对应的堆
,
然后从线上发到自己本机
dump
的命令是
jmap -dump:format=b,
2
、调整
e
clipse
的内存
具体的数值
,
需要看
dump
的文件大小
p>
.
比如我的
dump
文件是
1.3G,
我就
给了
eclipse 2G
的内存
..
据说有些
dump
文件有几十个
G
的大小
,
那么分析的
机器也必须比这个大才行
,
否则
< br>eclipse
本身就
OOM
了
.
3
、分析
.
调整到
Memory Analysis
< br>窗口
,
然后
File->Ope
n Heap Dump
然后选择
dump
的文件
,
然后
MAT
就自动会进行分析
..
分析完了
,
直接查
看
< br>
Leak Suspects Report . MAT
< br>会自动帮你找内存泄露的疑凶
.
然后给你
5
/
17
文档可自由编辑
点下面的
Detail
.
可以看到最直观的类和所占用的大小
可以看到
,
IosPushClient
的直接引用是
40byte
但是对应
的间接引用达到了
恐怖的
420M
那么再点击该类
,list obejcts
.
重点看间接引用占用的大的
6
/
17
文档可自由编辑
7
/
17
文档可自由编辑
可以看到这个
LinkedHashMap
中
,
有
47528
个
p>
1776byte
的对象。
其实看到这里
,
就基本清楚了
.
这个是由于在
push
的时候把对
应的
push
消息
给保留住
,
然后造成一直堆积在内存中造成的。
解决办法:
在不
修改对应的
push
底层实现的前提下
,
每次
push
了
2W
条消息就清
理一次
.
后续有时间再修改底层逻辑吧
.
案例二
1
内存泄漏的排查方法
8
/
17
文档可自由编辑
-
-
-
-
-
-
-
-
-
上一篇:《僵尸新娘》英汉对照台词
下一篇:高一英语必修三单词表修订稿