Java OutOfMemoryError 的定位与处理
应用日志出现 java.lang.OutOfMemoryError(Java heap space、Metaspace、Direct buffer memory、unable to create native thread),进程可能退出或被容器 OOMKilled。
jcmd <pid> GC.heap_info
jcmd <pid> VM.flags
jstat -gcutil <pid> 1000 10
jmap -histo:live <pid> | head -30
jcmd <pid> Thread.print | head -100
容器:
cat /sys/fs/cgroup/memory.max
cat /sys/fs/cgroup/memory.current
dmesg -T | grep -i oom
-XX:+HeapDumpOnOutOfMemoryError 和 dump 路径,保留现场。-Xmx、-XX:MaxMetaspaceSize、-XX:MaxDirectMemorySize 和线程池上限。java — JVM 参数jcmd / jmap / jstat — 诊断dmesg — 容器 OOM合上页面,先回答,再展开对照。
OutOfMemoryError?jcmd GC.heap_info、VM.flags、jstat 等确认。memory.max/memory.current 和 dmesg。-XX:+HeapDumpOnOutOfMemoryError 和 dump 路径,用堆快照/直方图找增长对象,调整 -Xmx、MaxMetaspaceSize、MaxDirectMemorySize 和线程池上限并修泄漏。