我们有许多c4.large ecs实例,每个实例都有一个正在运行的docker容器,并带有正在运行的celery worker.我们不时看到工人被系统杀死
WorkerLostError('Worker exited prematurely: signal 9 (SIGKILL).',)
在dmesg中,我可以看到以下行:
Memory cgroup out of memory: Kill process 27886 (celery) score 112 or sacrifice child
据我了解,OOM对此负责
但是我也可以在dmesg中看到这一行:
memory: usage 964544kB,limit 1048576kB,failcnt 246284
上面说有1 GB的限制,但是我不知道这个限制的原因是什么,因为free -m表示
total used free shared buffers cached
Mem: 3768 3461 307 0 140 2211
-/+ buffers/cache: 1108 2659
Swap: 0 0 0
另一个重要的一点是,我们有一个普通的ec2 c4.large实例,其中celery运行的工人人数相同(甚至更多),但没有docker,并且在此实例上我们从未见过此问题.所以我想可能是某些Docker开销消耗了内存,但也许我错过了一些事情?
谢谢
最佳答案
free显示总的内存量regardless of cgroup limits和容器可用的内存,因此您会看到混乱的数字.
原文链接:https://www.f2er.com/docker/532593.html可以通过命令行为docker容器指定cgroup限制,或者通过任务定义为亚马逊指定cgroup限制.检查内存parameter.