gpt4 book ai didi

python - 容器重启原因 OOMKilled,退出代码为 1

转载 作者:行者123 更新时间:2023-12-05 05:46:21 28 4
gpt4 key购买 nike

最近,部署中多个 pod 的同一个容器因 OOMKilled 事件而重新启动。以下是其中一个容器的描述:

State:          Running
Started: Tue, 15 Feb 2022 23:33:06 +0000
Last State: Terminated
Reason: OOMKilled
Exit Code: 1
Started: Fri, 11 Feb 2022 17:48:21 +0000
Finished: Tue, 15 Feb 2022 23:33:05 +0000
Ready: True
Restart Count: 1
Limits:
cpu: 1
memory: 512Mi
Requests:
cpu: 1
memory: 512Mi

如果容器超出可用内存的限制,它将退出并返回代码 137。而且我猜容器没有达到极限。所以我的问题是如果退出代码是 1 并且原因是 OOMKilled 会发生什么。

更新:该进程实际上是一个具有线程的 python 应用程序,这是代码:

ret = subprocess.run(args, stderr=subprocess.PIPE, universal_newlines=True, check=False)
if ret.returncode != 0:
logging.warning("Executing cmd failed: %s, code: %d, stderr: %s", cmd, ret.returncode, ret.stderr)
raise Exception("Failed")

和调用时的相关日志,返回-9:

2022-02-15T23:33:30.510Z WARNING "MainThread - Executing cmd failed: iptables-restore -n -w 3 restore-filter, code: -9, stderr: "
raise Exception("Failed")
Exception: Failed

来自 subprocess.run() 的描述:负值 -N 表示子进程被信号 N 终止(仅限 POSIX)。

所以因为引发了异常,所以 python 代码以 1 退出?可能..

最佳答案

两个可能的原因:

理由#1

子进程被 OOM killer 杀死(它从 OOM killer 收到 SIGKILL(9)),导致应用程序崩溃,退出代码 1OOMKilled 终止原因。

原因#2

如果您指定了 initContainers,init 容器可能已被 OOM killer 杀死,导致 OOMKilled 原因,并且应用程序崩溃并显示退出代码 1 由于初始化错误。


OOM kill 在 Kubernetes 文档中没有很好的记录。例如

Containers are marked as OOM killed only when the init pid gets killed by the kernel OOM killer. There are apps that can tolerate OOM kills of non init processes and so we chose to not track non-init process OOM kills.[source]

除了这个 GitHub 问题之外,我在任何地方都找不到任何关于它的提及。


我认为第一个原因更有可能。
可能的解决方案是增加内存限制(如果有的话)。

关于python - 容器重启原因 OOMKilled,退出代码为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71208960/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com