当Java应用抛出java.lang.OutOfMemoryError错误时,排查步骤如下:
- 确定OOM类型:常见类型包括Java heap space(堆内存溢出)、Metaspace(元空间溢出)、GC overhead limit exceeded(GC开销超限)等,不同类型对应不同的排查方向
- 监控分析:通过JVM监控观察新生代、老年代、Metaspace、DirectBuffer等各区域内存变化趋势,判断是哪个区域出现异常增长
- 定界问题来源:判断内存问题发生在堆内还是堆外。堆内问题可通过jmap等工具下载内存快照(heap dump),检查占比高的内存对象;堆外问题需要使用NMT(Native Memory Tracking)等工具监测堆外内存申请情况
- 深入分析:使用ARMS的白屏化内存快照功能便捷地创建和获取快照,结合ATP分析工具深入分析JVM内存对象与引用关系,定位到具体的泄漏点
- 根因修复:常见修复措施包括修复内存泄漏代码、调整
-Xms/-Xmx堆大小参数、优化大对象分配策略等




