我正在尝试了解和理解OOM-killer在容器中的工作方式。
为了弄清楚这一点,我阅读了很多文章,发现OOM-killer基于oom_score
来杀死容器进程。而oom_score
是由oom_score_adj
和该进程的内存使用量决定的。
cAdvisor提供了两个指标container_memory_working_set_bytes
和container_memory_rss
用于监视容器的内存使用情况。
看起来RSS内存(container_memory_rss
)对oom_score
有影响,因此我可以理解,如果该指标达到内存限制,OOM-killer将会杀死进程。
- https://github.com/torvalds/linux/blob/v3.10/fs/proc/base.c#L439
- https://github.com/torvalds/linux/blob/v3.10/mm/oom_kill.c#L141
- https://github.com/torvalds/linux/blob/v3.10/include/linux/mm.h#L1136
但是从以下文章中得知:
- https://faun.pub/how-much-is-too-much-the-linux-oomkiller-and-used-memory-d32186f29c9d
- https://blog.freshtracks.io/a-deep-dive-into-kubernetes-metrics-part-3-container-resource-metrics-361c5ee46e66
更好的指标是
container_memory_working_set_bytes
,因为这是OOM-killer正在监视的。
我无法理解OOM-killer正在监视容器工作集内存的事实。我认为我没有理解容器上的工作集内存的含义,即“总使用量-非活动文件”。
我应该去哪里找到参考资料?或者你能解释一下工作集内存和容器 OOM-kill 之间的关系吗?