高级java每日一道面试题-2026年04月05日-实战篇[Docker]-如何排查容器 OOM 的问题?

容器 OOM(Out of Memory)是生产环境中最常见的致命事件之一。在 Docker 中,OOM 表现为容器突然终止,退出码为 137(SIGKILL),且很可能没有任何应用日志。系统化地排查 OOM 需要从内核、cgroup、JVM 及应用行为多个层面入手,并针对 Java 容器的内存模型特点进行专项分析。

一、OOM 的本质与发生机制

当容器内所有进程占用的内存总量(包括文件缓存)超过其 cgroup 内存限制时,Linux 内核的 OOM Killer 会选择一个进程强制杀死,以保护宿主机和其他容器。容器退出码为 137(128+9,9 为 SIGKILL)。
#mermaid-svg-ANTjhh3dSk6tEukc{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ANTjhh3dSk6tEukc .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ANTjhh3dSk6tEukc .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ANTjhh3dSk6tEukc .error-icon{fill:#552222;}#mermaid-svg-ANTjhh3dSk6tEukc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ANTjhh3dSk6tEukc .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ANTjhh3dSk6tEukc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ANTjhh3dSk6tEukc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ANTjhh3dSk6tEukc .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ANTjhh3dSk6tEukc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ANTjhh3dSk6tEukc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ANTjhh3dSk6tEukc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ANTjhh3dSk6tEukc .marker.cross{stroke:#333333;}#mermaid-svg-ANTjhh3dSk6tEukc svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ANTjhh3dSk6tEukc p{margin:0;}#mermaid-svg-ANTjhh3dSk6tEukc .edge{stroke-width:3;}#mermaid-svg-ANTjhh3dSk6tEukc .section--1 rect,#mermaid-svg-ANTjhh3dSk6tEukc .section--1 path,#mermaid-svg-ANTjhh3dSk6tEukc .section--1 circle,#mermaid-svg-ANTjhh3dSk6tEukc .section--1 polygon,#mermaid-svg-ANTjhh3dSk6tEukc .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .section--1 text{fill:#ffffff;}#mermaid-svg-ANTjhh3dSk6tEukc .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-ANTjhh3dSk6tEukc .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .edge-depth--1{stroke-width:17;}#mermaid-svg-ANTjhh3dSk6tEukc .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled,#mermaid-svg-ANTjhh3dSk6tEukc .disabled circle,#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:lightgray;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:#efefef;}#mermaid-svg-ANTjhh3dSk6tEukc .section-0 rect,#mermaid-svg-ANTjhh3dSk6tEukc .section-0 path,#mermaid-svg-ANTjhh3dSk6tEukc .section-0 circle,#mermaid-svg-ANTjhh3dSk6tEukc .section-0 polygon,#mermaid-svg-ANTjhh3dSk6tEukc .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-ANTjhh3dSk6tEukc .section-0 text{fill:black;}#mermaid-svg-ANTjhh3dSk6tEukc .node-icon-0{font-size:40px;color:black;}#mermaid-svg-ANTjhh3dSk6tEukc .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-ANTjhh3dSk6tEukc .edge-depth-0{stroke-width:14;}#mermaid-svg-ANTjhh3dSk6tEukc .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled,#mermaid-svg-ANTjhh3dSk6tEukc .disabled circle,#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:lightgray;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:#efefef;}#mermaid-svg-ANTjhh3dSk6tEukc .section-1 rect,#mermaid-svg-ANTjhh3dSk6tEukc .section-1 path,#mermaid-svg-ANTjhh3dSk6tEukc .section-1 circle,#mermaid-svg-ANTjhh3dSk6tEukc .section-1 polygon,#mermaid-svg-ANTjhh3dSk6tEukc .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .section-1 text{fill:black;}#mermaid-svg-ANTjhh3dSk6tEukc .node-icon-1{font-size:40px;color:black;}#mermaid-svg-ANTjhh3dSk6tEukc .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .edge-depth-1{stroke-width:11;}#mermaid-svg-ANTjhh3dSk6tEukc .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled,#mermaid-svg-ANTjhh3dSk6tEukc .disabled circle,#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:lightgray;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:#efefef;}#mermaid-svg-ANTjhh3dSk6tEukc .section-2 rect,#mermaid-svg-ANTjhh3dSk6tEukc .section-2 path,#mermaid-svg-ANTjhh3dSk6tEukc .section-2 circle,#mermaid-svg-ANTjhh3dSk6tEukc .section-2 polygon,#mermaid-svg-ANTjhh3dSk6tEukc .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .section-2 text{fill:#ffffff;}#mermaid-svg-ANTjhh3dSk6tEukc .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-ANTjhh3dSk6tEukc .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .edge-depth-2{stroke-width:8;}#mermaid-svg-ANTjhh3dSk6tEukc .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled,#mermaid-svg-ANTjhh3dSk6tEukc .disabled circle,#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:lightgray;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:#efefef;}#mermaid-svg-ANTjhh3dSk6tEukc .section-3 rect,#mermaid-svg-ANTjhh3dSk6tEukc .section-3 path,#mermaid-svg-ANTjhh3dSk6tEukc .section-3 circle,#mermaid-svg-ANTjhh3dSk6tEukc .section-3 polygon,#mermaid-svg-ANTjhh3dSk6tEukc .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .section-3 text{fill:black;}#mermaid-svg-ANTjhh3dSk6tEukc .node-icon-3{font-size:40px;color:black;}#mermaid-svg-ANTjhh3dSk6tEukc .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .edge-depth-3{stroke-width:5;}#mermaid-svg-ANTjhh3dSk6tEukc .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled,#mermaid-svg-ANTjhh3dSk6tEukc .disabled circle,#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:lightgray;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:#efefef;}#mermaid-svg-ANTjhh3dSk6tEukc .section-4 rect,#mermaid-svg-ANTjhh3dSk6tEukc .section-4 path,#mermaid-svg-ANTjhh3dSk6tEukc .section-4 circle,#mermaid-svg-ANTjhh3dSk6tEukc .section-4 polygon,#mermaid-svg-ANTjhh3dSk6tEukc .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .section-4 text{fill:black;}#mermaid-svg-ANTjhh3dSk6tEukc .node-icon-4{font-size:40px;color:black;}#mermaid-svg-ANTjhh3dSk6tEukc .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .edge-depth-4{stroke-width:2;}#mermaid-svg-ANTjhh3dSk6tEukc .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled,#mermaid-svg-ANTjhh3dSk6tEukc .disabled circle,#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:lightgray;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:#efefef;}#mermaid-svg-ANTjhh3dSk6tEukc .section-5 rect,#mermaid-svg-ANTjhh3dSk6tEukc .section-5 path,#mermaid-svg-ANTjhh3dSk6tEukc .section-5 circle,#mermaid-svg-ANTjhh3dSk6tEukc .section-5 polygon,#mermaid-svg-ANTjhh3dSk6tEukc .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .section-5 text{fill:black;}#mermaid-svg-ANTjhh3dSk6tEukc .node-icon-5{font-size:40px;color:black;}#mermaid-svg-ANTjhh3dSk6tEukc .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .edge-depth-5{stroke-width:-1;}#mermaid-svg-ANTjhh3dSk6tEukc .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled,#mermaid-svg-ANTjhh3dSk6tEukc .disabled circle,#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:lightgray;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:#efefef;}#mermaid-svg-ANTjhh3dSk6tEukc .section-6 rect,#mermaid-svg-ANTjhh3dSk6tEukc .section-6 path,#mermaid-svg-ANTjhh3dSk6tEukc .section-6 circle,#mermaid-svg-ANTjhh3dSk6tEukc .section-6 polygon,#mermaid-svg-ANTjhh3dSk6tEukc .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .section-6 text{fill:black;}#mermaid-svg-ANTjhh3dSk6tEukc .node-icon-6{font-size:40px;color:black;}#mermaid-svg-ANTjhh3dSk6tEukc .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .edge-depth-6{stroke-width:-4;}#mermaid-svg-ANTjhh3dSk6tEukc .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled,#mermaid-svg-ANTjhh3dSk6tEukc .disabled circle,#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:lightgray;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:#efefef;}#mermaid-svg-ANTjhh3dSk6tEukc .section-7 rect,#mermaid-svg-ANTjhh3dSk6tEukc .section-7 path,#mermaid-svg-ANTjhh3dSk6tEukc .section-7 circle,#mermaid-svg-ANTjhh3dSk6tEukc .section-7 polygon,#mermaid-svg-ANTjhh3dSk6tEukc .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .section-7 text{fill:black;}#mermaid-svg-ANTjhh3dSk6tEukc .node-icon-7{font-size:40px;color:black;}#mermaid-svg-ANTjhh3dSk6tEukc .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .edge-depth-7{stroke-width:-7;}#mermaid-svg-ANTjhh3dSk6tEukc .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled,#mermaid-svg-ANTjhh3dSk6tEukc .disabled circle,#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:lightgray;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:#efefef;}#mermaid-svg-ANTjhh3dSk6tEukc .section-8 rect,#mermaid-svg-ANTjhh3dSk6tEukc .section-8 path,#mermaid-svg-ANTjhh3dSk6tEukc .section-8 circle,#mermaid-svg-ANTjhh3dSk6tEukc .section-8 polygon,#mermaid-svg-ANTjhh3dSk6tEukc .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .section-8 text{fill:black;}#mermaid-svg-ANTjhh3dSk6tEukc .node-icon-8{font-size:40px;color:black;}#mermaid-svg-ANTjhh3dSk6tEukc .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .edge-depth-8{stroke-width:-10;}#mermaid-svg-ANTjhh3dSk6tEukc .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled,#mermaid-svg-ANTjhh3dSk6tEukc .disabled circle,#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:lightgray;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:#efefef;}#mermaid-svg-ANTjhh3dSk6tEukc .section-9 rect,#mermaid-svg-ANTjhh3dSk6tEukc .section-9 path,#mermaid-svg-ANTjhh3dSk6tEukc .section-9 circle,#mermaid-svg-ANTjhh3dSk6tEukc .section-9 polygon,#mermaid-svg-ANTjhh3dSk6tEukc .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .section-9 text{fill:black;}#mermaid-svg-ANTjhh3dSk6tEukc .node-icon-9{font-size:40px;color:black;}#mermaid-svg-ANTjhh3dSk6tEukc .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .edge-depth-9{stroke-width:-13;}#mermaid-svg-ANTjhh3dSk6tEukc .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled,#mermaid-svg-ANTjhh3dSk6tEukc .disabled circle,#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:lightgray;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:#efefef;}#mermaid-svg-ANTjhh3dSk6tEukc .section-10 rect,#mermaid-svg-ANTjhh3dSk6tEukc .section-10 path,#mermaid-svg-ANTjhh3dSk6tEukc .section-10 circle,#mermaid-svg-ANTjhh3dSk6tEukc .section-10 polygon,#mermaid-svg-ANTjhh3dSk6tEukc .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .section-10 text{fill:black;}#mermaid-svg-ANTjhh3dSk6tEukc .node-icon-10{font-size:40px;color:black;}#mermaid-svg-ANTjhh3dSk6tEukc .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .edge-depth-10{stroke-width:-16;}#mermaid-svg-ANTjhh3dSk6tEukc .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled,#mermaid-svg-ANTjhh3dSk6tEukc .disabled circle,#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:lightgray;}#mermaid-svg-ANTjhh3dSk6tEukc .disabled text{fill:#efefef;}#mermaid-svg-ANTjhh3dSk6tEukc .section-root rect,#mermaid-svg-ANTjhh3dSk6tEukc .section-root path,#mermaid-svg-ANTjhh3dSk6tEukc .section-root circle,#mermaid-svg-ANTjhh3dSk6tEukc .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-ANTjhh3dSk6tEukc .section-root text{fill:#ffffff;}#mermaid-svg-ANTjhh3dSk6tEukc .section-root span{color:#ffffff;}#mermaid-svg-ANTjhh3dSk6tEukc .section-2 span{color:#ffffff;}#mermaid-svg-ANTjhh3dSk6tEukc .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-ANTjhh3dSk6tEukc .edge{fill:none;}#mermaid-svg-ANTjhh3dSk6tEukc .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-ANTjhh3dSk6tEukc :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 容器 OOM 排查
症状
容器突然消失/重启
SIGKILL
应用日志不完整
节点 dmesg 记录 OOM kill
触发条件
容器内存使用 > cgroup limit
宿主机全局内存耗尽
内存区域
JVM 堆
堆外内存(元空间、线程栈、NIO Direct Buffer)
非 JVM 进程(sidecar、shell 脚本)
page cache(文件 I/O)

二、系统化排查流程

排查 OOM 需从事件确认、内存分布分析、再到根因定位,逐层深入。
#mermaid-svg-uztvvY1bOf0rUJdh{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-uztvvY1bOf0rUJdh .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-uztvvY1bOf0rUJdh .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-uztvvY1bOf0rUJdh .error-icon{fill:#552222;}#mermaid-svg-uztvvY1bOf0rUJdh .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-uztvvY1bOf0rUJdh .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-uztvvY1bOf0rUJdh .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-uztvvY1bOf0rUJdh .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-uztvvY1bOf0rUJdh .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-uztvvY1bOf0rUJdh .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-uztvvY1bOf0rUJdh .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-uztvvY1bOf0rUJdh .marker{fill:#333333;stroke:#333333;}#mermaid-svg-uztvvY1bOf0rUJdh .marker.cross{stroke:#333333;}#mermaid-svg-uztvvY1bOf0rUJdh svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-uztvvY1bOf0rUJdh p{margin:0;}#mermaid-svg-uztvvY1bOf0rUJdh .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-uztvvY1bOf0rUJdh .cluster-label text{fill:#333;}#mermaid-svg-uztvvY1bOf0rUJdh .cluster-label span{color:#333;}#mermaid-svg-uztvvY1bOf0rUJdh .cluster-label span p{background-color:transparent;}#mermaid-svg-uztvvY1bOf0rUJdh .label text,#mermaid-svg-uztvvY1bOf0rUJdh span{fill:#333;color:#333;}#mermaid-svg-uztvvY1bOf0rUJdh .node rect,#mermaid-svg-uztvvY1bOf0rUJdh .node circle,#mermaid-svg-uztvvY1bOf0rUJdh .node ellipse,#mermaid-svg-uztvvY1bOf0rUJdh .node polygon,#mermaid-svg-uztvvY1bOf0rUJdh .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-uztvvY1bOf0rUJdh .rough-node .label text,#mermaid-svg-uztvvY1bOf0rUJdh .node .label text,#mermaid-svg-uztvvY1bOf0rUJdh .image-shape .label,#mermaid-svg-uztvvY1bOf0rUJdh .icon-shape .label{text-anchor:middle;}#mermaid-svg-uztvvY1bOf0rUJdh .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-uztvvY1bOf0rUJdh .rough-node .label,#mermaid-svg-uztvvY1bOf0rUJdh .node .label,#mermaid-svg-uztvvY1bOf0rUJdh .image-shape .label,#mermaid-svg-uztvvY1bOf0rUJdh .icon-shape .label{text-align:center;}#mermaid-svg-uztvvY1bOf0rUJdh .node.clickable{cursor:pointer;}#mermaid-svg-uztvvY1bOf0rUJdh .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-uztvvY1bOf0rUJdh .arrowheadPath{fill:#333333;}#mermaid-svg-uztvvY1bOf0rUJdh .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-uztvvY1bOf0rUJdh .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-uztvvY1bOf0rUJdh .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-uztvvY1bOf0rUJdh .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-uztvvY1bOf0rUJdh .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-uztvvY1bOf0rUJdh .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-uztvvY1bOf0rUJdh .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-uztvvY1bOf0rUJdh .cluster text{fill:#333;}#mermaid-svg-uztvvY1bOf0rUJdh .cluster span{color:#333;}#mermaid-svg-uztvvY1bOf0rUJdh div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-uztvvY1bOf0rUJdh .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-uztvvY1bOf0rUJdh rect.text{fill:none;stroke-width:0;}#mermaid-svg-uztvvY1bOf0rUJdh .icon-shape,#mermaid-svg-uztvvY1bOf0rUJdh .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-uztvvY1bOf0rUJdh .icon-shape p,#mermaid-svg-uztvvY1bOf0rUJdh .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-uztvvY1bOf0rUJdh .icon-shape .label rect,#mermaid-svg-uztvvY1bOf0rUJdh .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-uztvvY1bOf0rUJdh .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-uztvvY1bOf0rUJdh .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-uztvvY1bOf0rUJdh :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否

容器 cgroup
宿主机全局
堆内存
堆外
其他进程
容器崩溃/重启
退出码是否为137?
检查其它原因
确认 OOM 事件
查看宿主机 dmesg/logs
OOM 事件指向谁?
分析容器内存使用
节点内存耗尽
分解内存: JVM堆/堆外/非JVM进程
主要内存占用来向?
分析JVM堆: GC日志/heap dump
检查元空间/线程数/NIO
检查sidecar/shell/其他进程
内存泄漏或配置过小
线程泄漏/直接内存未释放
非Java组件泄漏
节点上容器总和超限

需调整调度或扩容
制定修复方案

三、关键排查点与理论依据

排查点 理论依据 如何获取信息
确认 OOM 事件 内核 OOM Killer 会向系统日志输出详细的终止报告,包括进程名、PID、内存使用量等。 宿主机 dmesgjournalctl -k,搜索 Out of memoryKilled process
区分 cgroup OOM 与全局 OOM 如果内核日志显示 oom-kill:constraint=CONSTRAINT_MEMCG,说明是容器 cgroup 限制触发;如果 constraint=CONSTRAINT_NONE 或没有约束,可能是宿主机内存不足。 从 dmesg 的 oom-kill 行判断。
容器内存分布 容器内存 = JVM 堆 + 元空间 + 线程栈 + NIO Direct Buffer + 其他本地内存 + 非 JVM 进程内存。必须分别分析才能定位泄漏点。 docker stats 查看总量;jcmd 或 JMX 查看 JVM 内部分布;smempmap 分析进程内存映射(需要进入容器或宿主机)。
JVM 堆内存 -Xmx 限制 JVM 堆最大大小,若设置过小,则频繁 GC 最终无法腾出空间导致 OOM;若有内存泄漏,GC 后堆仍满。 开启 GC 日志(-Xlog:gc*),分析 GC 频率和老年代使用趋势;生成 Heap dump 分析对象分布。
JVM 堆外内存 元空间(Metaspace)存放类元数据,线程栈(每个线程默认约 1MB)随线程数增长,NIO Direct Buffer 分配在堆外。这些都可能无限增长。 监控 jvm_memory_used_bytes(Micrometer)的 non-heap 区域;jcmd VM.native_memory summary 查看本地内存分布(需开启 -XX:NativeMemoryTracking=summary)。
线程数泄漏 每个线程分配栈内存,如果线程数意外增多(如线程池未限制),内存会持续消耗。 jstack 或 JMX ThreadCount
容器总内存限制 若 JVM 堆设置接近容器限制,但未预留堆外空间,即使堆没满,堆外内存增长也会触发 OOM。 通过 docker inspect 查看 MemLimit,对比应用实际使用量。

四、Java 容器 OOM 的典型场景

场景 根因 排查特征 解决方案
堆内存泄漏 对象被无意中持续引用(如 static 集合),GC 无法回收。 GC 日志显示老年代持续增长,Full GC 后无释放;heap dump 中某类对象数量异常。 修复代码泄漏点。
堆设置过小 -Xmx 小于应用稳态所需。 GC 频繁,最终堆满 OOM。 增大 -Xmx 或容器内存限制。
元空间泄漏 动态生成大量类(如反射、CGLIB 代理、Groovy 脚本),且类加载器未回收。 Metaspace 持续增长直至 MaxMetaspaceSize 或占满本地内存。 限制 -XX:MaxMetaspaceSize,排查类加载泄漏。
线程泄漏 线程池不断创建线程但未回收,每个线程消耗 1MB 左右栈内存。 容器内存逐渐增加,线程数异常升高。 修复线程池配置或代码中未关闭线程的问题。
NIO Direct Buffer 泄漏 直接内存分配后未显式释放(System.gc()Cleaner),堆外内存增长。 堆使用正常,但容器总内存不断上升。 使用 -XX:MaxDirectMemorySize 限制,检查 NIO 使用是否规范。
JVM 未感知容器限制 旧版本 JVM 读取宿主机总内存设置默认堆大小,远超容器限制。 启动即 OOM,或很快 OOM。 使用 Java 10+ 且开启 UseContainerSupport,或手动设置 -XX:MaxRAMPercentage
Sidecar 或辅助进程 如日志采集 agent、监控 agent 等消耗过多内存。 容器总内存减 JVM 内存差值较大。 限制 sidecar 资源或优化其内存使用。

五、预防与长效治理

  • 合理设置容器内存限制:应大于 JVM 最大堆 + 元空间上限 + 线程栈 * 最大线程数 + 其他本地内存预留,建议设置为 JVM 堆的 1.5 ~ 2 倍。
  • 启用 JVM 容器感知-XX:+UseContainerSupport(默认)配合 -XX:MaxRAMPercentage=75.0,使堆自动适配容器限制。
  • 设置堆外内存上限-XX:MaxMetaspaceSize-XX:MaxDirectMemorySize,防止无线增长。
  • 应用层内存监控:通过 Micrometer 暴露 JVM 内存指标,Prometheus 采集并设置告警。
  • 定期 Heap dump 分析 :可在 OOM 时自动生成 dump(-XX:+HeapDumpOnOutOfMemoryError),便于事后分析。
  • 节点资源预留:在 Kubernetes 中合理配置 Request 和 Limit,避免调度过度。

六、思维导图总结

#mermaid-svg-iUYMdLVtARrUW5ya{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-iUYMdLVtARrUW5ya .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-iUYMdLVtARrUW5ya .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-iUYMdLVtARrUW5ya .error-icon{fill:#552222;}#mermaid-svg-iUYMdLVtARrUW5ya .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-iUYMdLVtARrUW5ya .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-iUYMdLVtARrUW5ya .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-iUYMdLVtARrUW5ya .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-iUYMdLVtARrUW5ya .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-iUYMdLVtARrUW5ya .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-iUYMdLVtARrUW5ya .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-iUYMdLVtARrUW5ya .marker{fill:#333333;stroke:#333333;}#mermaid-svg-iUYMdLVtARrUW5ya .marker.cross{stroke:#333333;}#mermaid-svg-iUYMdLVtARrUW5ya svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-iUYMdLVtARrUW5ya p{margin:0;}#mermaid-svg-iUYMdLVtARrUW5ya .edge{stroke-width:3;}#mermaid-svg-iUYMdLVtARrUW5ya .section--1 rect,#mermaid-svg-iUYMdLVtARrUW5ya .section--1 path,#mermaid-svg-iUYMdLVtARrUW5ya .section--1 circle,#mermaid-svg-iUYMdLVtARrUW5ya .section--1 polygon,#mermaid-svg-iUYMdLVtARrUW5ya .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .section--1 text{fill:#ffffff;}#mermaid-svg-iUYMdLVtARrUW5ya .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-iUYMdLVtARrUW5ya .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .edge-depth--1{stroke-width:17;}#mermaid-svg-iUYMdLVtARrUW5ya .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled,#mermaid-svg-iUYMdLVtARrUW5ya .disabled circle,#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:lightgray;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:#efefef;}#mermaid-svg-iUYMdLVtARrUW5ya .section-0 rect,#mermaid-svg-iUYMdLVtARrUW5ya .section-0 path,#mermaid-svg-iUYMdLVtARrUW5ya .section-0 circle,#mermaid-svg-iUYMdLVtARrUW5ya .section-0 polygon,#mermaid-svg-iUYMdLVtARrUW5ya .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-iUYMdLVtARrUW5ya .section-0 text{fill:black;}#mermaid-svg-iUYMdLVtARrUW5ya .node-icon-0{font-size:40px;color:black;}#mermaid-svg-iUYMdLVtARrUW5ya .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-iUYMdLVtARrUW5ya .edge-depth-0{stroke-width:14;}#mermaid-svg-iUYMdLVtARrUW5ya .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled,#mermaid-svg-iUYMdLVtARrUW5ya .disabled circle,#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:lightgray;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:#efefef;}#mermaid-svg-iUYMdLVtARrUW5ya .section-1 rect,#mermaid-svg-iUYMdLVtARrUW5ya .section-1 path,#mermaid-svg-iUYMdLVtARrUW5ya .section-1 circle,#mermaid-svg-iUYMdLVtARrUW5ya .section-1 polygon,#mermaid-svg-iUYMdLVtARrUW5ya .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .section-1 text{fill:black;}#mermaid-svg-iUYMdLVtARrUW5ya .node-icon-1{font-size:40px;color:black;}#mermaid-svg-iUYMdLVtARrUW5ya .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .edge-depth-1{stroke-width:11;}#mermaid-svg-iUYMdLVtARrUW5ya .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled,#mermaid-svg-iUYMdLVtARrUW5ya .disabled circle,#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:lightgray;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:#efefef;}#mermaid-svg-iUYMdLVtARrUW5ya .section-2 rect,#mermaid-svg-iUYMdLVtARrUW5ya .section-2 path,#mermaid-svg-iUYMdLVtARrUW5ya .section-2 circle,#mermaid-svg-iUYMdLVtARrUW5ya .section-2 polygon,#mermaid-svg-iUYMdLVtARrUW5ya .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .section-2 text{fill:#ffffff;}#mermaid-svg-iUYMdLVtARrUW5ya .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-iUYMdLVtARrUW5ya .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .edge-depth-2{stroke-width:8;}#mermaid-svg-iUYMdLVtARrUW5ya .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled,#mermaid-svg-iUYMdLVtARrUW5ya .disabled circle,#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:lightgray;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:#efefef;}#mermaid-svg-iUYMdLVtARrUW5ya .section-3 rect,#mermaid-svg-iUYMdLVtARrUW5ya .section-3 path,#mermaid-svg-iUYMdLVtARrUW5ya .section-3 circle,#mermaid-svg-iUYMdLVtARrUW5ya .section-3 polygon,#mermaid-svg-iUYMdLVtARrUW5ya .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .section-3 text{fill:black;}#mermaid-svg-iUYMdLVtARrUW5ya .node-icon-3{font-size:40px;color:black;}#mermaid-svg-iUYMdLVtARrUW5ya .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .edge-depth-3{stroke-width:5;}#mermaid-svg-iUYMdLVtARrUW5ya .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled,#mermaid-svg-iUYMdLVtARrUW5ya .disabled circle,#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:lightgray;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:#efefef;}#mermaid-svg-iUYMdLVtARrUW5ya .section-4 rect,#mermaid-svg-iUYMdLVtARrUW5ya .section-4 path,#mermaid-svg-iUYMdLVtARrUW5ya .section-4 circle,#mermaid-svg-iUYMdLVtARrUW5ya .section-4 polygon,#mermaid-svg-iUYMdLVtARrUW5ya .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .section-4 text{fill:black;}#mermaid-svg-iUYMdLVtARrUW5ya .node-icon-4{font-size:40px;color:black;}#mermaid-svg-iUYMdLVtARrUW5ya .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .edge-depth-4{stroke-width:2;}#mermaid-svg-iUYMdLVtARrUW5ya .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled,#mermaid-svg-iUYMdLVtARrUW5ya .disabled circle,#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:lightgray;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:#efefef;}#mermaid-svg-iUYMdLVtARrUW5ya .section-5 rect,#mermaid-svg-iUYMdLVtARrUW5ya .section-5 path,#mermaid-svg-iUYMdLVtARrUW5ya .section-5 circle,#mermaid-svg-iUYMdLVtARrUW5ya .section-5 polygon,#mermaid-svg-iUYMdLVtARrUW5ya .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .section-5 text{fill:black;}#mermaid-svg-iUYMdLVtARrUW5ya .node-icon-5{font-size:40px;color:black;}#mermaid-svg-iUYMdLVtARrUW5ya .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .edge-depth-5{stroke-width:-1;}#mermaid-svg-iUYMdLVtARrUW5ya .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled,#mermaid-svg-iUYMdLVtARrUW5ya .disabled circle,#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:lightgray;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:#efefef;}#mermaid-svg-iUYMdLVtARrUW5ya .section-6 rect,#mermaid-svg-iUYMdLVtARrUW5ya .section-6 path,#mermaid-svg-iUYMdLVtARrUW5ya .section-6 circle,#mermaid-svg-iUYMdLVtARrUW5ya .section-6 polygon,#mermaid-svg-iUYMdLVtARrUW5ya .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .section-6 text{fill:black;}#mermaid-svg-iUYMdLVtARrUW5ya .node-icon-6{font-size:40px;color:black;}#mermaid-svg-iUYMdLVtARrUW5ya .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .edge-depth-6{stroke-width:-4;}#mermaid-svg-iUYMdLVtARrUW5ya .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled,#mermaid-svg-iUYMdLVtARrUW5ya .disabled circle,#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:lightgray;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:#efefef;}#mermaid-svg-iUYMdLVtARrUW5ya .section-7 rect,#mermaid-svg-iUYMdLVtARrUW5ya .section-7 path,#mermaid-svg-iUYMdLVtARrUW5ya .section-7 circle,#mermaid-svg-iUYMdLVtARrUW5ya .section-7 polygon,#mermaid-svg-iUYMdLVtARrUW5ya .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .section-7 text{fill:black;}#mermaid-svg-iUYMdLVtARrUW5ya .node-icon-7{font-size:40px;color:black;}#mermaid-svg-iUYMdLVtARrUW5ya .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .edge-depth-7{stroke-width:-7;}#mermaid-svg-iUYMdLVtARrUW5ya .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled,#mermaid-svg-iUYMdLVtARrUW5ya .disabled circle,#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:lightgray;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:#efefef;}#mermaid-svg-iUYMdLVtARrUW5ya .section-8 rect,#mermaid-svg-iUYMdLVtARrUW5ya .section-8 path,#mermaid-svg-iUYMdLVtARrUW5ya .section-8 circle,#mermaid-svg-iUYMdLVtARrUW5ya .section-8 polygon,#mermaid-svg-iUYMdLVtARrUW5ya .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .section-8 text{fill:black;}#mermaid-svg-iUYMdLVtARrUW5ya .node-icon-8{font-size:40px;color:black;}#mermaid-svg-iUYMdLVtARrUW5ya .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .edge-depth-8{stroke-width:-10;}#mermaid-svg-iUYMdLVtARrUW5ya .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled,#mermaid-svg-iUYMdLVtARrUW5ya .disabled circle,#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:lightgray;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:#efefef;}#mermaid-svg-iUYMdLVtARrUW5ya .section-9 rect,#mermaid-svg-iUYMdLVtARrUW5ya .section-9 path,#mermaid-svg-iUYMdLVtARrUW5ya .section-9 circle,#mermaid-svg-iUYMdLVtARrUW5ya .section-9 polygon,#mermaid-svg-iUYMdLVtARrUW5ya .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .section-9 text{fill:black;}#mermaid-svg-iUYMdLVtARrUW5ya .node-icon-9{font-size:40px;color:black;}#mermaid-svg-iUYMdLVtARrUW5ya .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .edge-depth-9{stroke-width:-13;}#mermaid-svg-iUYMdLVtARrUW5ya .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled,#mermaid-svg-iUYMdLVtARrUW5ya .disabled circle,#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:lightgray;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:#efefef;}#mermaid-svg-iUYMdLVtARrUW5ya .section-10 rect,#mermaid-svg-iUYMdLVtARrUW5ya .section-10 path,#mermaid-svg-iUYMdLVtARrUW5ya .section-10 circle,#mermaid-svg-iUYMdLVtARrUW5ya .section-10 polygon,#mermaid-svg-iUYMdLVtARrUW5ya .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .section-10 text{fill:black;}#mermaid-svg-iUYMdLVtARrUW5ya .node-icon-10{font-size:40px;color:black;}#mermaid-svg-iUYMdLVtARrUW5ya .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .edge-depth-10{stroke-width:-16;}#mermaid-svg-iUYMdLVtARrUW5ya .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled,#mermaid-svg-iUYMdLVtARrUW5ya .disabled circle,#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:lightgray;}#mermaid-svg-iUYMdLVtARrUW5ya .disabled text{fill:#efefef;}#mermaid-svg-iUYMdLVtARrUW5ya .section-root rect,#mermaid-svg-iUYMdLVtARrUW5ya .section-root path,#mermaid-svg-iUYMdLVtARrUW5ya .section-root circle,#mermaid-svg-iUYMdLVtARrUW5ya .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-iUYMdLVtARrUW5ya .section-root text{fill:#ffffff;}#mermaid-svg-iUYMdLVtARrUW5ya .section-root span{color:#ffffff;}#mermaid-svg-iUYMdLVtARrUW5ya .section-2 span{color:#ffffff;}#mermaid-svg-iUYMdLVtARrUW5ya .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-iUYMdLVtARrUW5ya .edge{fill:none;}#mermaid-svg-iUYMdLVtARrUW5ya .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-iUYMdLVtARrUW5ya :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 容器OOM排查
症状识别
退出码137
容器重启
dmesg OOM日志
原因定位
cgroup OOM vs 宿主机OOM
内存组成: 堆/堆外/非JVM
Java分析
堆内存泄漏
元空间/线程泄漏
Direct Buffer泄漏
未感知容器限制
排查工具
dmesg/journalctl
docker stats / inspect
GC日志 / heap dump
jcmd NativeMemoryTracking
JS预防
容器内存>JVM堆+堆外
MaxRAMPercentage
MaxMetaspaceSize
监控与告警

总结 :排查容器 OOM 的本质是分解内存占用,定位超限组件。首先通过 dmesg 确认 OOM 事件和触发类型,然后分解容器内存为 JVM 堆、堆外内存和其他进程内存,结合 GC 日志、heap dump 和本地内存追踪工具,定位泄漏或配置不当之处。针对 Java 应用,必须协调好 JVM 堆与容器限制的比例,并充分预留堆外内存空间。在面试中,展现这一套从症状到根因再到预防的完整逻辑,是容器化运维和 Java 性能调优能力的强力证明。

相关推荐
带娃的IT创业者1 小时前
监控并非安全:当隐私成为技术的祭品
java·开发语言·安全·数据安全·监控·隐私保护·加密技术
SLD_Allen2 小时前
K8s+Ray:大模型时代AI Workload调度的通用范式
人工智能·容器·kubernetes
叩码以求索2 小时前
使用next数组加速匹配过程
java·数据结构·算法
余额瞒着我当琳2 小时前
C++ 基础核心概念精讲:引用、内联与 nullptr
java·开发语言·c++
再玩一会儿看代码3 小时前
JUnit 测试框架详解:从实际开发、业务测试到 Java 面试高频问题
java·经验分享·笔记·junit·面试
RisunJan3 小时前
Linux命令-route(查看/修改 IP 路由表)
linux·运维
yxlalm3 小时前
2.java秒杀项目第二课-后端登录功能
java·开发语言
镜像车间4 小时前
我用飞牛NAS在本地建了一个rhex论坛
docker