docker常见问题排查处理

当Docker容器退出码为137时,意味着容器收到SIGKILL信号,通常是由于内存不足导致的OOMKilled。文章通过检查容器状态和系统dmesg日志,发现是由于Java进程内存消耗过大被系统杀死。解决方法包括服务器扩容或调整任务内存使用限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、查看容器退出码
docker inspect [container_id]
二、Exit Code分析

1、Exit Code 137

  • 表明容器收到了 SIGKILL 信号,进程被杀掉,对应 kill -9

  • 引发 SIGKILL 的是 Docker Kill。这可以由用户或由 Docker 守护程序来发起,手动执行:docker kill

  • 137 比较常见,如果 pod 中的 limit 资源设置较小,会运行内存不足导致 OOMKilled,此时 state 中的 “OOMKilled” 值为 true,你可以在系统的 dmesg 中看到 oom 日志

查看容器的退出原因,OOMKilled 为 false,就需要通过查看系统 dmesg日志

"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 137,
"Error": "",
"StartedAt": "2022-08-05T07:29:42.80888438Z",
"FinishedAt": "2023-02-22T13:33:14.947766595Z"
},

系统 dmesg日志显示,进程 2507446 由于 oom 问题导致被系统 kill。

[29574478.992648] Tasks state (memory values in pages):
[29574478.993122] [ pid ] uid tgid total_vm rss pgtables_bytes swapents oom_score_adj name
[29574479.009065] [1163669] 0 1163669 661458 0 1265664 134597 0 java
[29574479.010718] [2507446] 0 2507446 1320030 219064 4042752 219262 0 java
[29574479.021002] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=docker-88f33ee17166f44690de361c89f8bc6cd275dae85422304765e508eaedbf50e7.scope,mems_allowed=0,global_oom,task_memcg=/system.slice/docker-deb1361213732f53591cd31f637b850bfc67506db55aa7915a55243f9c49ef75.scope,task=java,pid=2507446,uid=0
[29574479.022546] Out of memory: Killed process 2507446 (java) total-vm:5280120kB, anon-rss:876256kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:3948kB oom_score_adj:0

参数含义

  • total-vm: total virtual memory. 进程使用的总的虚拟内存。

  • rss: resident set size. 驻留集大小。驻留集是指进程已装入内存的页面的集合。

  • anon-rss: anonymous rss. 匿名驻留集。比如malloc出来的就是匿名的。

  • file-rss: 映射到设备和文件上的内存页面。

  • shmem-rss: 大概是shared memory rss

由于任务异常已退出,可通过排除法确认是否为该任务的进程id

docker container top [container_id]

最终确认任务退出原因为 oom 导致,但是并不一定表示该任务存在异常,也有可能是操作系统内存不足时,会将内存使用较大的任务优先 kill。

解决办法:

  • 服务器扩容,增加内存条。

  • 减小任务的内存使用量。

-Xms256m
-Xmx512m

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

magic_kid_2010

你的支持将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值