CS-Notes 学习笔记
面试最常问Java 后端 · Java 虚拟机

线上出现 OOM 怎样排查?

先自己想一想,再看参考要点

参考要点

  • 先看错误信息判断是哪块内存:Java heap space、GC overhead limit exceeded、Metaspace、direct buffer memory、unable to create native thread
  • 元空间、直接内存、线程创建失败分别检查类的生成与卸载、堆外内存的释放、线程数和容器的限制,不能靠增大堆解决
  • Java heap space 时,启动时加 -XX:+HeapDumpOnOutOfMemoryError 保存堆转储,或用 jcmd \<pid> GC.heap_dump 导出
  • 用 MAT 按 Retained Heap 排序,查看大对象到 GC Roots 的引用链
  • 引用链不该存在就是内存泄漏,改代码,否则增大堆或减少一次加载的数据
在学习站中自测这道题看这道题所在的一天

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。