一、现象
业务容器中的应用突然就挂了,然后并未找到什么问题,于是找我们协助排查
- 这里插一句,我们对于容器的使用比较特殊,是富容器的用法,一个容器会起多个进程,虽然不是太云原生,但是也是要在公司兼容老的一些系统的一种折衷方案吧。我们容器中的一号进程是systemd
二、问题排查
遇到这个问题第一反应就是oom了,于是去看了下内核日志:
分析了一下oom的dump,计算rss(需要*4,因为是rss是按照4k一个page去分配的) 这一列相加 大概是6G,这个数据和监控也符合大概75%的实际使用率(容器分配的是8G)。
但是这个应用分配的内存是8g为啥,实际用了6g就触发oom kill呢?
首先我们监控系统的容器内存使用率算法:container_memory_usage_bytes - container_memory_cache, 这个算出来和rss是基本一致的,从这个角度看没什么问题
但是容器中计算内存oom的是container_memory_working_set_bytes这个指标 。通过查询文档
https://faun.pub/how-much-is-too-much-the-linux-oomkiller-and-used-memory-d32186f29c9d