ecs docker容器中celery工人的奇怪行为

Vik*_*hov 5 amazon-ec2 amazon-ecs celery docker

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

WorkerLostError('Worker exited prematurely: signal 9 (SIGKILL).',)
Run Code Online (Sandbox Code Playgroud)

dmesg可以看到以下行:

Memory cgroup out of memory: Kill process 27886 (celery) score 112 or sacrifice child
Run Code Online (Sandbox Code Playgroud)

据我了解 OOM 对此负责

但我也可以在以下位置看到这一行dmesg

memory: usage 964544kB, limit 1048576kB, failcnt 246284
Run Code Online (Sandbox Code Playgroud)

其中说有 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
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Rom*_*val 4

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

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