MAT(Memory Analyzer tool)使用
当线上环境出现OOM/内存泄漏了,怎么办?
让虚拟机在发生内存溢出时 Dump 出当前的内存堆转储快照,配置-XX:+HeapDumpOnOutOfMemoryError,
当出现OOM时,分析dump下来的hprof文件,一般使用MAT辅助查看。
安装方式:
1 eclipse安装MAT插件;安装说明:https://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ma/index.html
2 独立版本(建议),下载地址:http://www.eclipse.org/mat/downloads.php,下载解压后就可以直接用。

分析一个堆转储文件需要消耗堆空间,需要分配内存,
MemoryAnalyzer.ini中的参数一般默认为-vmargs– Xmx1024m;
当dump文件的大小大于配置的1024m,会报错;
方式1:修改启动参数 MemoryAnalyzer.exe-vmargs -Xmx4g
方式2:编辑文件 MemoryAnalyzer.ini,修改/添加参数 -vmargs– Xmx4g
模拟产生hprof文件:
public class OOMTest {
public static void main(String[] args) {
List<Person> list1 = new ArrayList<>();
for (Long i = 0L; i < 1000L; i++) {
list1.add(new Person(i, i.toString(), i.toString()));
}
List<Shop> list2 = new ArrayList<>();
for (long i = 0L; i < 256L * 1024L * 1024L; i++) {
list2.add(new Shop(i));
}
}
static class Person {
private Long id;
private String name;
private String idcard;
public Person(Long id, String name, String idcard) {
this.id = id;
this.name = name;
this.idcard = idcard;
}
}
}
修改相关参数,这里加上了 -XX:+HeapDumpOnOutOfMemoryError -Xmx256M

执行后:

dump下来的hrof文件在项目工程目录下(或指定导出目录:-XX:HeapDumpPath)。
打开MAT工具,File >> Open Heap Dump...

通过分析结果,很容易知道哪些对象占用了大量的堆内存。
MAT会把分析结果打包成zip包,解压后通过浏览器就可以访问。

打开对象依赖关系树形视图

相关链接:
http://seanhe.iteye.com/blog/898277
http://www.blogjava.net/rosen/archive/2010/06/13/323522.html
https://blog.csdn.net/rachel_luo/article/details/8992461
MAT(Memory Analyzer tool)使用的更多相关文章
- 使用MAT(Memory Analyzer Tool)工具分析dump文件--转
原文地址:http://gao-xianglong.iteye.com/blog/2173140?utm_source=tuicool&utm_medium=referral 前言 生产环境中 ...
- MAT(Memory Analyzer Tool)工具入门介绍
1.MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速.功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗 ...
- MAT(Memory Analyzer Tool)工具入门介绍(转)
1.MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速.功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗 ...
- MAT Memory Analyzer Tool 插件安装(图解)
MAT Memory Analyzer Tool 插件安装(图解) 原文地址 @author YHC 前段时间做了一个项目,Exception in thread "main" j ...
- 【转】MAT(Memory Analyzer Tool)工具入门介绍
1.MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速.功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗 ...
- 内存分析工具-MAT(Memory Analyzer Tool)
内存分析工具-MAT(Memory Analyzer Tool) 首先查看如下代码,main函数中有一个成员变量map,map里被循环放入对象Hanson,hanson持有姓名和age还有friend ...
- Android 内存分析工具 MAT(Memory Analyzer Tool)
如果使用DDMS确实发现了我们的程序中存在内存泄漏,那又如何定位到具体出现问题的代码片段,最终找到问题所在呢?如果从头到尾的分析代码逻辑,那肯定 会把人逼疯,特别是在维护别人写的代码的时候.这里介绍一 ...
- 转载:MAT Memory Analyzer Tool使用示例
地址:http://blog.csdn.net/yanghongchang_/article/details/7711911 以下是一个会导致java.lang.OutOfMemoryError: J ...
- MAT(Memory Analyzer Tool)内存分析工具的使用
开发.应用中老是会遇到OutOfMemory异常,而且常常是过一段时间内存才被吃光,这里可以利用java heap dump出jvm内存镜像,然后再对其进行分析来查找问题. 平常利用jmap -dum ...
- [性能测试]:内存泄漏以及MAT(Memory Analyzer Tool)工具使用分析
一.今天在查看服务器时候,发现内存使用率直接就到99%了, 二.用ps -uaxw查看一下,每个占用内存较多的进程情况: 三,挑出可疑的进程,生成dump文件: jmap -dump:format=b ...
随机推荐
- docker 基本学习
Docker的应用场景: 加速本地开发和构建流程,使其更加高效.更加轻量化.本地开发人员可以构建.运行并分享Docker容器.容器可以在开发环境中构建,然后轻松地提交到测试环境中,并最终进入生产环境. ...
- [转载] ffmpeg摄像头视频采集-采集步骤概述并采集一帧视频
近期由于工作任务,需要开发一个跨平台视频聊天系统,其中就用到了ffmpeg进行采集与编码,网上找了一大堆的资料,虽然都有一些有用的东西,但实在太碎片化了,这几天一直在整理和实验这些资料,边整理,边做一 ...
- CodeForces - 963D:Frequency of String (bitset暴力搞)
You are given a string ss. You should answer nn queries. The ii-th query consists of integer kiki an ...
- 设计模式之享元(flyweight)模式
现在在大力推行节约型社会,“浪费可耻,节俭光荣”.在软件系统中,有时候也会存在资源浪费的情况,例如,在计算机内存中存储了多个完全相同或者非常相似的对象,如果这些对象的数量太多将导致系统运行代价过高.那 ...
- linux之文件操作
1. 文件操作思维导图 2. linux系统目录结构及简单说明 linux目录图: root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普 ...
- iOS UI调试工具 -- UIDebuggingInformationOverlay
英文原文: http://ryanipete.com/blog/ios/swift/objective-c/uidebugginginformationoverlay/ 无意中看到iOS自带调试工具 ...
- LeetCode Subarray Product Less Than K
原题链接在这里:https://leetcode.com/problems/subarray-product-less-than-k/description/ 题目: Your are given a ...
- django中的@login_required
转:http://www.cnblogs.com/ccorz/p/Django-zhong-loginrequired-yong-fa-jian-jie.html 1.网站开发时的登录需求: ===用 ...
- 设置ubantu的软件源地址
查看所用的源 $ sudo vim /etc/apt/sources.list 由于安装的Ubuntu Server 16.04.1 LTS是英文版的,软件源就默认都是 us.archive.ubun ...
- android通过查询电话号码获取联系人信息
// 取得Intent中的頭像 ivShowImage = (ImageView) findViewById(R.id.call_log_detail_contact_img); //通话电话号码获取 ...