青成林语

协助他人,成就彼此 ^_^
线上OOM问题排查

背景:线上服务器内存资源水位经常达到85%,有时候甚至OOM,这个时候怎么去分析优化呢?

一、获取dump文件

目标 Java 进程的 PID 是 13700。你可以按照以下两种常用方法来正确获取 dump 文件:

方法一:使用 jmap 命令手动导出(推荐)

可以直接复制以下命令在终端执行。这里加上了 live 参数,它的作用是只保存堆中存活的对象,这样生成的 dump 文件体积会更小,也更方便后续分析:

jmap -dump:live,format=b,file=/home/project/logs/dumpfile.hprof 13700

参数说明:

  • live:只导出当前存活的对象(生产环境强烈建议加上)。
  • format=b:指定输出格式为二进制格式(binary)。
  • file=...:指定 dump 文件的保存路径和文件名。

方法二:配置 JVM 参数自动导出

如果你希望在程序发生内存溢出(OOM)时系统能自动保存现场,可以在启动应用时添加以下 JVM 参数:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/project/logs/oom_dump.hprof

这样当应用触发 OutOfMemoryError 时,JVM 会自动在指定路径生成 dump 文件。

⚠️ 生产环境注意事项:
生成 dump 文件(尤其是使用 jmap 时)会触发 Full GC 并导致应用暂停(STW, Stop-The-World)。由于你的进程内存占用较大(约 5GB),生成 dump 文件可能会耗费一定时间。建议在业务低峰期进行操作,并确保目标磁盘有足够的可用空间。


dump 文件生成后,如何使用 jvisualvm 或 MAT 来分析内存泄漏?

二、分析dump文件

1、需要使用工具查看,这里使用MAT。

  • MAT 官方下载链接:https://www.eclipse.org/mat/

2da9d5c0aa87c9af188dd1e410a2ecda

 

image

 

 

 

2、使用教程

image

image

image

 

posted on 2026-08-13 08:02  青成林语  阅读(3)  评论(0)    收藏  举报