行是知之始,知是行之成。这篇文章主要讲述生产环境MAT内存分析流程相关的知识,希望能为你提供帮助。
背景内存分析指MAT,即memory analysis tool,通常使用eclipse提供的MemoryAnalyzer的工具包解析dump文件。本文档适用于没有安装eclipse软件的服务器,直接在命令行中生成解析结果,将解析结果下载到本地,通过html查看其内容,比较方便。
dump文件dump一般译作转储,有动词和名词两种场景。动词场景:因为程序在计算机中运行时,在内存、CPU、I/O等设备上的数据都是动态的(或者说是易失的),也就是说数据使用完或者发生异常就会丢掉。如果我想得到某些时刻的数据(有可能是调试程序Bug或者收集某些信息),就要把他转储(dump)为静态(如文件)的形式。否则,这些数据你永远都拿不到。
名词场景:dump作为名词一般就是指dump(动词)的结果文件。
jmapjmap主要可以用于打印java进程的内存映射或堆内存(Heap Dump文件)细节。(如:产生哪些对象,以及数量等)。主要是用在检查内存泄漏、一些严重影响性能的大对象,检查系统中什么对象创建的最多,分析各种对象所占用的大小等。
【生产环境MAT内存分析流程】命令:
解释:
- format=b表示生成的dump文件是二进制格式的。
- file=dataode17600.hprof 表示在当前目录下生成dataode17600.hprof这个dump文件。
文章图片
将DataNode进程的内存使用情况dump下来:
文章图片
安装MemoryAnalyzer工具,以解析dataode17600.hprof文件,例如:
解压缩后,命令会放到mat文件夹中,生成如下文件:
文章图片
使用ParseHeapDump.sh脚本解析dataode17600.hprof文件:
其中:
- org.eclipse.mat.api:suspects 表示生成内存泄露报告
- org.eclipse.mat.api:overview 表示生成概述报告
- org.eclipse.mat.api:top_components 表示生成大对象报告
文章图片
生成如下文件,其中.zip文件有用,里面包含html文件,html文件中包含内存分析结果:
文章图片
将三个zip包下载到本地,解压后,其中一个zip包如下:
文章图片
打开index.html,就可以看内存泄漏分析报告:
文章图片
打开第二个zip包中的html文件,查看概览报告:
文章图片
打开第二个zip包中的html文件,查看大对象报告:
文章图片
参考文档
- https://www.cnblogs.com/trust-freedom/p/6744948.html
- https://juejin.cn/post/6844903782766084103
- https://www.cnblogs.com/hellxz/p/use_mat_linux_command_line_generate_reports.html
推荐阅读
- 什么是Docker?Docker可以干什么?
- docker
- docker 安装 wordpress,通过nginx反向代理,绑定域名,配置https
- docker-compose部署gitlab
- [C语言]三子棋
- 使用 Python3 脚本给多个人同时发送多个 excel 附件
- 智慧军营进出库管理系统
- 初识函数递归
- java 从零开始手写 RPC (02)-netty4 实现客户端和服务端