写点什么

给,你们想要的内存溢出 MAT 排查工具

用户头像
田维常
关注
发布于: 2020 年 11 月 21 日

关注“Java 后端技术全栈”


回复“000”获取大量电子书


本文总结了排查内存溢出问题的 MAT 工具,先来看看本文目录:



Java 堆内存分析工具。


 1@RestController 2public class MatController { 3 4    List<User> list = new ArrayList<>(); 5 6    @GetMapping("/mat") 7    public String mat() { 8        for (int i = 0; i < 10000000; i++) { 9            User user = new User();10            user.setId(1L);11            user.setUserName("老田" + i);12            list.add(user);13        }14        return "ok";15    }16}
复制代码


设置 JVM 启动参数


1-Xms20m -Xmx20m -XX:MaxPermSize=20m -XX:+HeapDumpOnOutOfMemoryError
复制代码


访问http://localhost:8080/mat


不过一会就报异常了。然后



与之同时,生成了一个文件


实战 MAT


下载地址:


http://www.eclipse.org/mat/do...


下载到本地并解压



双击MemoryAnalyzer.exe打开



我们把前面生成的java_pid4928.hprof文件导入进来



点击 finish




我的天啦,立刻就把我们问题定位到了,MatController这个类的嫌疑最大(其实线上环境一般都不会这么容易)。


点击图中的最大区域


  • outgoing references 对象的引出

  • incoming references  对象的引入


另外Path to GC Roots这是快速分析的一个常用功能,显示和 GC Roots 之间的路径。


树状图


左上角 有个图标,树状图



进入树状图



一眼就知道我们的 MatController 有问题,居然排在最前面了。另外两个关键属性:


  • Shallow Heap:浅堆,表示对象本身的内存占用。

  • Retained Heap:深堆,表示对象自身的内存占用


而且在 MatController 类上还有个 Regex,支持正则表达式,于是我就输入了我特有的命名 tian,按下回车键:



然后,便把 tian 相关的全部输出。


同理,如果我们在排查线上问题是,也可以输入我们特有关键字等来快速定位问题。每个公司基本上都有自己一套独立的包目录。我们就可以使用那个特有的关键字进行搜索。


点开 MatController 类,下面有个 List,然后 List 存了 User 对象,这不就是我们上面的代码么?



柱状图



同样在左上角有个柱状图



点击进去



看到第一行有 Regex,哈哈,又是支持正在表达式,我们再次输入 tian 关键字。


并且我们发现


1com.tian.dto.User
复制代码


对象个数是 132033 个。


OQL


MAT 支持一种类似于 SQL  的查询语言OQL(Object Query Language),这个查询语言 VisualVM工具也支持。


OQL将类表示为表,对象表示为行,字段表示为列。


语法:


1SELECT *2FROM [ INSTANCEOF ] <class name="name">3[ WHERE <filter-expression> ]4</filter-expression></class>
复制代码


F5或者Ctrl+enter或者点击红色的感叹号立即执行OQL



输入关键词还可以提示:



查询结果



更多 OQL 相关的操作,推荐看官网:


https://help.eclipse.org/2020...


推荐阅读:


《精通lambda表达式:Java多核编程》.pdf


《Java程序员修炼之道》.pdf


《Spring Cloud与Docker微服务架构实战》.pdf


发布于: 2020 年 11 月 21 日阅读数: 42
用户头像

田维常

关注

关注公众号:Java后端技术全栈,领500G资料 2020.10.24 加入

关注公众号:Java后端技术全栈,领500G资料

评论

发布
暂无评论
给,你们想要的内存溢出MAT排查工具