Linux版本的MAT(Eclipse Memory Analyzer)内存分析工具使用

 

首先先下载对应平台的工具

官方地址:https://eclipse.dev/mat/download/

 因为我是arm的架构 所以下载的是arm64的安装包

下载完成后解压 得到以下内容

 

 

 

先修改初始化的启动的内存大小 

vim MemoryAnalyzer.ini

 主要修改这个值 这个要尽量大点 不然我们的内存分析文件很大 会执行不了 

注意:这个需要jdk17及以上才可以  

如果环境有多个jdk版本 可以通过添加配置指定 如下图所示

 

 在上面增加 jdk17的bin目录位置

-vm
/usr/lib/jvm/java-17-openjdk-arm64/bin

 

 

hprof生成


dump可以是内存溢出时让其自动生成,或者手工直接导。配置jvm参数-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/biapp/m.hprof

手工直接导,PID为进程号

jmap -dump:live,format=b,file=m.hprof PID 

其中 pid 可以通过执行  ps -ef|grep  java 看到

 

 

 

 

命令示例  (创建一个单独的目录执行这个,因为执行产生的文件会直接生成在当前目录下)

./ParseHeapDump.sh m.hprof org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components

说明:

1、./ParseHeapDump.sh m.hprof:

     ./ParseHeapDump.sh 是要执行的脚本文件,m.hprof 是你传递给脚本的堆转储文件(heap dump)路径。m.hprof 是一个 .hprof 文件,通常包含 Java 应用程序的内存快照。
2、org.eclipse.mat.api:suspects:

      这个参数指示脚本执行与 "suspects" 相关的分析。suspects 通常是指堆转储中可能存在内存泄漏的地方,脚本会检查哪些对象在堆中占用了大量内存并且可能是泄漏的源头。通常,这些是无法被垃圾回收的对象,它们持有大量   引用,导致内存无法释放。
3、org.eclipse.mat.api:overview:

     overview 是一个分析任务,通常用于生成堆转储的总体概览。这可能包括堆内存的使用情况、对象数量、内存占用最多的类、最大的对象等信息。通过该命令,你可以获得堆内存的概览,帮助你了解内存分配的总体情况。
4、org.eclipse.mat.api:top_components:

      这个参数会请求脚本显示堆转储中内存占用最多的组件或对象。通常,"top components" 是指占用最多内存的类或对象。通过这个分析,你可以识别出内存使用不当或可能引发性能问题的组件。

 

执行成功后 会在当前目录出现以下文件

 

 主要是这几个压缩包,其他都是过程文件, 解压之后 查看这几个文件内容

 

 

 

posted @ 2025-03-23 02:05  yvioo  阅读(281)  评论(0)    收藏  举报