线上故障排查(2) - Java应用故障之堆溢出OOM问题及排查方案

 

以下是用于测试OOM的测试代码:

这段代码非常简单,其目的就是为了模拟OOM,将其编译后,通过以下命令运行:

java -Xmx10m -Xms10m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./oom.out HeapMemUseTest
其中的参数代表的意义为:

-Xmx和-Xms分别是用于指定该Java进程初使化的最小堆内存以及可以使用的最大堆内存的,这里设置为10M

-XX:+HeapDumpOnOutOfMemoryError和-XX:HeapDumpPath参数分别用于指定发生OOM是否要导出堆以及导出堆的文件路径

该命令一执行,立即就会发生OOM,并打印如下的日志:


查看当前路径,oom.out文件已经生成了,该文件就是应用在发生OOM异常时自动导出的堆文件。那我们此时需要对该文件进行分析,因为其中记录了是什么对象导出了应用程OOM的发生。

分析OOM的工具推荐使用MAT,下载地址为https://projects.eclipse.org/projects/tools.mat,在配置好Java环境的电脑中,直接打开即可,不需要安装,然后通过MAT打开已经生成的OOM文件oom.out,出现如下提示,选择“Leak Suspects Report”执行内存泄漏检查分析:

 

posted @ 2019-08-12 20:29  Kero小柯  阅读(1061)  评论(0编辑  收藏  举报