解决问题记录:OOM排查,MAT、JConsole、Centos7

本文记录了如何使用JConsole监控JVM内存状况,并通过MAT分析内存溢出问题。当遇到服务器程序内存溢出时,可以通过生成Dump文件,然后在服务器上安装MAT进行分析。MAT能生成缩小后的分析报告,帮助定位并解决内存溢出原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MAT独立版链接
在这里插入图片描述

  • 下面方法是通过启动命令生成Dump,也可通过 jmap 命令单独生成,此例不做讲解
// -Xms:初始对大小 -Xmx:最大堆大小 -XX:+UseG1GC:指定使用G1收集器  
// -XX:+HeapDumpOnOutOfMemoryError 内存溢出时生成Dump文件 -XX:HeapDumpPath:生成路径
java -Xms1024m -Xmx1024m -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./ -jar Alpha_2.jar

//  多加了用于JVM可视化工具链接的参数,不需要可视化工具的选用上面的即可
java -Djava.rmi.server.hostname=192.168.88.88 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=3214 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Xms1024m -Xmx1024m -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./ -jar Alpha_2.jar 

JVM可视化工具我用的JDK自带的 JConsole,方便了解内存占用情况
在这里插入图片描述
在这里插入图片描述

以服务器程序内存溢出排查为例

  • 要注意的是生成的Dump文件大小与你JVM内存大小一致,导致文件从服务器拉取下来过慢,所以需要在服务器上安装个 MAT。如果你的Dump文件小则可以拉取下来用MAT直接打开。
    • 解压MAT.zip
 // 安装 unzip: yum install -y unzip zip
 unzip MemoryAnalyzer-1.10.0.20200225-linux.gtk.x86_64.zip
 // 解压后生成名为 mat 文件

在这里插入图片描述

  • 内存溢出后会自动生成 hprof 文件,然后通过MAT分析它
// 进入到有 ParseHeapDump.sh 文件的目录。‘/root/java_pid16773.hprof’ 替换为自己文件路径
./ParseHeapDump.sh /root/java_pid16773.hprof  org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components

在这里插入图片描述

  • 执行后会生成三个zip,拉取到本地即可(分析后的文件大小要比原文件缩小很多)
    在这里插入图片描述
  • 解压后打开 index.html 即可
    在这里插入图片描述
  • 通过 html 可查看对象占用内存情况,定位溢出代码,帮助我们更好的分析溢出原因。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值