首页/系统/信创系统运维速查/Java 堆内存溢出(OOM)的处理
常见问题65 条

Java 堆内存溢出(OOM)的处理

报 OutOfMemoryError: Java heap space 是堆不足或泄漏:看 GC 与堆快照,完按容量调 Xmx 验证,再追对象来源。

信创系统运维速查系统更新于 2026-10-12

取证

取证
jcmd <PID> GC.heap_info                       # 堆使用与上限
jstat -gcutil <PID> 1000 5                    # GC 频率与各区占比
# 建议启动参数(OOM 时留快照):
# -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/dumps

调整

调整
# 堆上限示例(留出 OS 与其他进程余量):
java -Xms2g -Xmx2g -jar app.jar
# 容器/服务托管:确认 Xmx 小于容器内存上限,避免被 OOM 杀掉
# 快照用分析工具定位对象来源
Xmx 不是越大越好:堆过大让 GC 停顿变长,并挤压页缓存与其他进程。

易错点

  • 容器里 Xmx 大于容器上限:进程会被系统或编排层杀掉,表现像「莫名重启」
  • 只扩堆不看 GC 日志:泄漏问题会把新上限再次填满

数据来源与参考

  • OpenJDK 文档(HotSpot VM 选项)
  • man 1 jcmd
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌