-
我给容器里的 Java 应用明明设了 2GB 的内存上限、也没配多大的堆,可它一加压就被 OOMKilled 反复重启,我对着监控看 JVM 堆用量百思不得其解,最后才搞懂这个老版本 JVM 根本不知道自己被关在了 2GB 的容器里它按宿主机那 64GB 内存算了个十几 GB 的最大堆的深度复盘
我把 Java 服务部署到 K8s、给容器设了 limits.memory: 2Gi,想着 2GB 够它跑、启动 JVM 也没特意配 -Xmx。低负载正常,可流量一上来负载一加压 Pod 就被 OOMKilled、重启、再被杀陷入 CrashLoop。我以为是堆不够或内存泄漏,可监控里 JVM 堆使用量还没涨多高就被杀;又怀疑 limit 设小了,可这服务物理机上撑死用一两 GB。直到进容器执行 …- 4
- 0
-
我的 Java 服务在容器里跑着跑着就被干掉重启,kubectl 显示 OOMKilled,可服务器明明有几十 G 内存,排查发现是 JVM 根本不知道自己被关在了一个小盒子里的深度复盘
我的 Java 服务跑在 K8s 里、给容器设了 memory limit 512Mi,可它跑着跑着就被杀掉重启,kubectl describe pod 写着 OOMKilled,而宿主机明明有几十 G 内存,JVM 自己也没抛 OutOfMemoryError。查到底才明白:JVM 没感知到容器的内存限制——它启动时按看到的机器总内存(宿主机几十 G,不是容器 cgroup 限制的 512Mi…- 0
- 0
-
我给容器设了 2G 内存上限,Java 服务却反复被 OOMKilled 重启,JVM 日志里还说自己堆远没满,我对着容器里的 JVM 不感知 cgroup 内存限制按宿主机内存设堆这个坑排查了大半天的复盘
一个让我对容器里的程序到底看到多少内存彻底搞明白的 DevOps 坑,抓狂在一个矛盾现象:容器被系统以内存超限 OOMKilled 杀掉,可 JVM 自己的监控却一脸无辜说堆还远没满,一边喊内存爆了一边说还多着呢。Java 服务部署 K8s 容器设内存上限 2Gi,Pod 反复重启 Reason=OOMKilled、Exit137、Restart Count 飙升;进容器看 JVM 说堆用得好好的…- 0
- 0
-
我的 Java 容器上线后总是莫名其妙被杀、日志没有任何异常就直接退出 137,我对着 OOMKilled 和容器内存限制排查了大半天的复盘
把一个跑得好好的 Java 服务容器化扔上 K8s 后,它时不时无声无息地重启:应用日志干干净净、没有任何异常堆栈,进程就直接没了。直到 kubectl describe pod 看到 Last State: OOMKilled, Exit Code: 137,我才意识到不是程序崩了,是它被外面强杀了。排查大半天才搞懂根因:容器用 cgroup 把内存限制在 1G,但老版本 JVM 不感知容器、通…- 2
- 0
-
我的 Java 服务一上 K8s 就莫名其妙地被反复重启、退出码永远是 137,我对着 OOMKilled 这个状态和容器内存限制排查了大半天才搞懂的惨痛经历
我的 Java 服务在虚拟机上稳如老狗,一上 K8s 就反复重启,kubectl describe 显示 Reason: OOMKilled、Exit Code: 137。我给容器配了 4G limit、虚拟机上 4G 也够用,怎么会内存不足?深挖才懂:JVM 在容器里"看不见"cgroup 的内存 limit——容器 limit 是 4G 但节点宿主机有 64G,我没设 -X…- 0
- 0
-
我的容器三天两头被悄无声息地重启,exit code 137,应用日志里却啥错误都没留下,我查了好几天才发现是被内存限制 OOMKilled 的深度复盘
我的服务跑在 K8s 容器里,三天两头被悄无声息地重启,可应用日志里啥错误都没有——像跑得好好的突然被一闷棍打死。看容器状态才发现线索:exit code 137、Reason: OOMKilled。深究才懂:容器内存超过了我设的 memory limit,被 Linux 内核 OOM Killer 用 SIGKILL 强杀;SIGKILL 无法捕获、无法清理,所以应用没机会留下任何日志;137 …- 0
- 0
-
容器明明限制了 1G 内存,Java 服务却一上线就被 OOMKilled 反复重启:我在 Docker 里栽进 JVM 看不见容器内存限制的那次排查复盘
一个平时只用几百兆的 Java 服务,部署到限制 1Gi 内存的容器里,却一启动就 OOMKilled、陷入 CrashLoopBackOff。钻进容器一看,JVM 认为自己的最大堆是 8G——它读到的是宿主机 32G 物理内存、按 1/4 算出 8G,完全看不见 cgroup 给的 1G 限制。这篇从容器=隔离+限制的本质讲到 UseContainerSupport/MaxRAMPercenta…- 0
- 0
-
容器设了 2GB 内存上限服务却反复被 OOMKilled、可 JVM 堆明明没满:JVM 不感知容器限制按宿主机算堆撑爆容器的避坑复盘
这是我们把一个老 Java 服务上容器时踩的第一个也是最懵的一个坑。我们把这个服务打成镜像部署到 K8s 给它的容器设了一个内存上限 2GB,我们估摸着这个服务平时也就用几百兆内存 2GB 绰绰有余了。可服务一启动跑不了多久就被 K8s 给 OOMKilled 因内存超限被杀了,杀了之后自动重启重启完跑一会又被杀如此反复陷入了 CrashLoopBackOff 崩溃重启循环根本起不来。我特别纳闷这…- 6
- 0
-
宿主机内存够却被 OOMKilled:容器 JVM 内存避坑
我们把一个 Java 服务容器化上了 K8s,给 Pod 配了 2GB 内存上限,本以为足够宽裕。可上线后容器三天两头重启,Pod 状态写得明明白白:OOMKilled、退出码 137。最费解的是这台宿主机有 64GB 内存空闲得很,进容器用 top、free 看显示的全是宿主机那 64GB 富得流油,可容器就是一次次以内存超限为由被处决。排查好一阵真相才浮出水面、经典得让人哭笑不得:我那个版本的…- 0
- 0
-
Pandas DataFrame 内存从 12GB 飙到 78GB OOMKilled 风控漏判 4 小时的 5 天复盘:object dtype + groupby 笛卡尔 + SettingWithCopy 三重叠加 + 11 条 Pandas 内存纪律
我们一个 4200 万行电商风控批处理任务,因加入商家维度 join,内存从 12GB 飙到 78GB,Worker 三次 OOMKilled,风控漏判 4 小时影响 17 万订单。5 天定位发现 object dtype + groupby 高 cardinality + SettingWithCopy 三重反模式叠加,治理后内存压到 4.2GB,沉淀完整 Pandas 内存治理 SOP 与 1…- 3
- 0
-
K8s Pod 频繁 OOMKilled 但应用日志看起来一切正常的 9 天复盘:JVM 堆只是冰山一角 + 6 层因果链 + 10 条治理纪律
接手新组发现 Pod 每天被 OOMKilled,前任团队加了 4 次内存(4Gi→16Gi)都没解决。9 天复盘找出真凶:JVM 堆只是冰山一角,真正吃内存的是 Direct Memory、Metaspace、JNI、RocksDB mmap 等"看不见"的部分。本文 6 层因果链、NMT+jemalloc+pmap 三件套、4 种修法、10 条治理纪律。- 0
- 0
-
K8s Pod 每天 20 次 OOMKilled 实录:JVM 堆外内存治理全链路
订单服务在 K8s 每天 OOMKilled 20+ 次,exit code 137,JVM 无 OOM 日志。投一周排查:JVM 没感知 cgroup limit + Direct Memory 失控 + 线程数 280 个 + Metaspace 涨 + cgroup v2 核算变化。最终参数 + NMT 定位 + 监控告警全套修法,30 天零重启,P99 800ms→80ms。- 0
- 0
-
K8s Pod OOMKilled 排查指南:6 种真实原因 + 每种修法
K8s Pod 反复 OOMKilled exit code 137。本文列 6 种真实场景:Java 堆外内存超 limits、Go 不知道 cgroup limits、Python fork 后 RSS 翻倍、Node 默认堆上限、sidecar 吃光内存、内存碎片。每种附 kubectl 命令 + 修法 + 配置模板。- 0
- 0
OOMKilled
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!













