我正在生产环境中运行Python应用程序,但是我的pod在生产环境中经常重新启动。在暂存环境中不会发生这种情况。
所以我认为这可能是CPU和内存限制问题。我也更新了。
进一步调试,我得到了137
退出代码。
要进行更多调试,我进入Kubernetes节点并检查容器。
使用的命令:docker inspect < container id >
此处输出:
{
"Id": "a0f18cd48fb4bba66ef128581992e919c4ddba5e13d8b6a535a9cff6e1494fa6",
"Created": "2019-11-04T12:47:14.929891668Z",
"Path": "/bin/sh",
"Args": [
"-c",
"python3 run.py"
],
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 137,
"Error": "",
"StartedAt": "2019-11-04T12:47:21.108670992Z",
"FinishedAt": "2019-11-05T00:01:30.184225387Z"
},
OOMKilled是错误的,因此我认为这不是问题。
使用GKE主版本:1.13.10-gke.0
答案 0 :(得分:1)
从技术上讲,这137项均意味着您的进程由于SIGKILL而被终止。不幸的是,这没有足够的信息来知道它的来源。最重要的是,诸如audited或Falco之类的工具可以通过记录这类系统调用来帮助收集数据,或者至少使您与之接近。
答案 1 :(得分:1)
退出代码137是docker exit code,它告诉我们该容器已被OOM杀手杀死。这并不意味着容器本身已达到内存限制或没有足够的内存来运行。由于操作系统级别的OOM杀手正在杀死应用程序,因此pod和docker不会为容器本身注册OOM,因为它不一定达到内存限制。
以上链接的文档详细介绍了如何调试错误137,尽管您还可以检查节点指标的内存使用情况或检查节点日志以查看OOM是否曾经在操作系统级别注册。
如果这是常见问题,请确保您的python容器包含限制,并确保集群中的其他容器都设置了适当的请求和限制。