说明:docker-compose up时,报了某Container exited with code 137… 我怀疑该容器被Linux进行OOMKille了
一、问题描述
服务器上发包,构建完镜像执行Up的时候,给我提示了个:Container exited with code 137 。
这又是靓女落泪的一小会儿啊…
不过,看提示code 137,猜测是服务器内存不足,直接被Linux OOM killer(Out-Of-Memory killer)了。
获取镜像的元数据:docker inspect ContainerId
查看镜像的元数据,State中有个OOMKilled属性,为true则表示容器收到了SIGKILL信号,进程被杀掉了。
二、什么是OOM?
OOM全称 Out-of-Memory,是指操作系统的可用内存已经不足,且无法再分配新的内存出来给进程使用,导致系统无法继续工作。若不紧急处理,将会导致整个系统崩溃,所有进程均被杀死。
因此Linux OS为了保证内核系统层面的稳定运行,会根据一定算法规则,选出最优先占内存空间最大的进程进行杀死,进而释放出较多的内存空间,使系统程序继续稳定运行。这个机制就是OOM Killer机制。
三、解决方案
楼主遇到的是这种情况,所以释放了内存。再重新跑就好了。
查看存储:docker system df
删除所有unused镜像:docker system prune -a
当然还有一种情况是:还有内存,但oom-killer依旧把进程杀死了。
这种情况是low memory耗尽,内核使用low memory来跟踪所有的内存分配。如果low memory耗尽,不管high memory剩多少,oom-killer都会杀死进程,以保持系统的正常运行。
可参考:https://developer.aliyun.com/article/513783
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/115754.html