当线上环境出现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)使用的更多相关文章

  1. 使用MAT(Memory Analyzer Tool)工具分析dump文件--转

    原文地址:http://gao-xianglong.iteye.com/blog/2173140?utm_source=tuicool&utm_medium=referral 前言 生产环境中 ...

  2. MAT(Memory Analyzer Tool)工具入门介绍

    1.MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速.功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗 ...

  3. MAT(Memory Analyzer Tool)工具入门介绍(转)

    1.MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速.功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗 ...

  4. MAT Memory Analyzer Tool 插件安装(图解)

    MAT Memory Analyzer Tool 插件安装(图解) 原文地址 @author YHC 前段时间做了一个项目,Exception in thread "main" j ...

  5. 【转】MAT(Memory Analyzer Tool)工具入门介绍

    1.MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速.功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗 ...

  6. 内存分析工具-MAT(Memory Analyzer Tool)

    内存分析工具-MAT(Memory Analyzer Tool) 首先查看如下代码,main函数中有一个成员变量map,map里被循环放入对象Hanson,hanson持有姓名和age还有friend ...

  7. Android 内存分析工具 MAT(Memory Analyzer Tool)

    如果使用DDMS确实发现了我们的程序中存在内存泄漏,那又如何定位到具体出现问题的代码片段,最终找到问题所在呢?如果从头到尾的分析代码逻辑,那肯定 会把人逼疯,特别是在维护别人写的代码的时候.这里介绍一 ...

  8. 转载:MAT Memory Analyzer Tool使用示例

    地址:http://blog.csdn.net/yanghongchang_/article/details/7711911 以下是一个会导致java.lang.OutOfMemoryError: J ...

  9. MAT(Memory Analyzer Tool)内存分析工具的使用

    开发.应用中老是会遇到OutOfMemory异常,而且常常是过一段时间内存才被吃光,这里可以利用java heap dump出jvm内存镜像,然后再对其进行分析来查找问题. 平常利用jmap -dum ...

  10. [性能测试]:内存泄漏以及MAT(Memory Analyzer Tool)工具使用分析

    一.今天在查看服务器时候,发现内存使用率直接就到99%了, 二.用ps -uaxw查看一下,每个占用内存较多的进程情况: 三,挑出可疑的进程,生成dump文件: jmap -dump:format=b ...

随机推荐

  1. 【英语】Bingo口语笔记(83) - hell系列

  2. C++多态技术

    转自:    http://blog.sciencenet.cn/blog-58025-691458.html 摘要 本文介绍了C++中的各种多态性,重点阐述了面向对象的动态多态和基于模板的静态多态, ...

  3. VS2013 快捷方式

    1.查找空行:  使用正则表达式 ^\s\S*$\n

  4. WCF日志跟踪SvcTraceViewer.exe

    参考: https://msdn.microsoft.com/zh-cn/library/ms732023.aspx https://msdn.microsoft.com/zh-cn/library/ ...

  5. terraform 阿里云基本使用

    1. 预备环境 安装了terraform 的软件的操作系统(windows linux mac 均可) 具有阿里云账户的 access_key secret_key 2. 配置 // terrafor ...

  6. C#枚举Enum[轉]

    枚举是一个指定的常数,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举.定义默认基数从O开始, ...

  7. #51单片机#蓝牙模块(ATK-SPP-HC06从机串口)的使用方法

    #include <AT89X51.H> #include <intrins.h> // 函数原形定义 #define uchar unsigned char #define ...

  8. linux下修改ip地址

    1.more  /etc/sysconfig/network-scripts/ifcfg-eth0 2.ifconfig eth0 192.168.1.211 netmask 255.255.255. ...

  9. Base64加密算法

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RFC2049,上面有MIME的详细规范. Ba ...

  10. PHP MysqlI操作数据库(转)

    1连接数据库. Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter. ...