为什么内核 kill OOM 导致 Dockerd 死掉

2018-12-27 10:13:15 +08:00
 cheneydog

问题描述

我在使用 k8s 私有云的过程中,由于 jvm 和 docker 内存限定问题,总是触发内核的 OOM。但是触发了内核的 OOM 之后,dockerd 就有可能死掉,完全无反应。

问题出现的环境背景及自己尝试过哪些方法

Client:
 Version:           18.06.1-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        e68fc7a
 Built:             Tue Aug 21 17:23:03 2018
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.1-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       e68fc7a
  Built:            Tue Aug 21 17:25:29 2018
  OS/Arch:          linux/amd64
  Experimental:     false

我曾尝试关掉内核的 OOM kill 机制,但是没有生效。

sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time = 120
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
kernel.sysrq = 1
vm.overcommit_memory = 2
2411 次点击
所在节点    问与答
5 条回复
cheneydog
2018-12-27 10:14:54 +08:00
基于容器的云应该很多的吧,不会因为客户的 jvm 参数不对就卡死吧。
Vogan
2018-12-27 10:46:11 +08:00
1.内核版本太低
2.限制单个容器的内存和 CPU
denghongcai
2018-12-27 12:09:42 +08:00
oom killer 杀了除 Dockerd 之外的其他进程后,Docker 无法正常工作了?这个感觉比较奇怪

建议 GitHub 上提个 issue
ooeyunarika
2018-12-27 13:02:36 +08:00
docker ps 能用但不能 docker run 有点奇怪,dockerd 没有抛出相关日志么?或者看一下 docker golang 的堆栈,github 提 issue 也会要求附上 golang 内存堆栈的

之前我遇到过 docker ps 都不行的死锁情况,是因为 container 在被 kill 的时候会加锁,禁止所有对 container 的 crud 操作,多个锁一起就很容易引起死锁.lz 遇到的问题很可能也是 container 上的死锁导致的

另外也可以试着提高 dockerd 的优先级,系统的 OOM Kill 会优先杀优先级比较低的进程
cheneydog
2018-12-27 17:51:54 +08:00
@ooeyunarika 卡住之后 dockerd 的日志是完全停止的。docker golang 的堆栈没看过,我去找下看。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/521408

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX