4

我们有许多c4.largeecs 实例,每个实例都有一个正在运行的 docker 容器和正在运行的 celery 工作人员。我们不时看到工人被系统杀死

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

另一个重要的一点是,我们有一个普通的 ec2c4.large实例,我们在其中运行 celery 并使用相同数量(甚至更多)的工人,但没有 docker,我们从未在这个实例上看到过这个问题。所以我想这可能是一些消耗内存的 docker 开销,但也许我错过了什么?

谢谢

4

1 回答 1

4

free无论 cgroup 限制和容器可用内存如何,都会显示内存总量,因此您会看到令人困惑的数字。

可以通过命令行为 docker 容器指定 cgroup 限制,或者在亚马逊的情况下通过任务定义。检查memory 参数

于 2015-11-06T18:18:54.470 回答