【问题标题】:What is the difference between “container_memory_working_set_bytes” and “container_memory_rss” metric on the container容器上的“container_memory_working_set_bytes”和“container_memory_rss”指标有什么区别
【发布时间】:2021-04-02 07:54:14
【问题描述】:

我需要监控在 kubernetes 集群上运行的容器内存使用情况。看了一些文章后有两个建议:“container_memory_rss”、“container_memory_working_set_bytes”

两个指标的定义都说了(来自 cAdvisor 代码)

  • “container_memory_rss”:匿名和交换缓存内存的数量
  • “container_memory_working_set_bytes”:工作集内存量,包括最近访问的内存、脏内存和内核内存

我认为这两个指标都代表进程使用的物理内存的字节大小。但是我的 grafana 仪表板中的两个值之间存在一些差异。

我的问题是:

  • 两个指标有什么区别?
  • 哪些指标更适合监控内存使用情况?一些帖子说两者都是因为其中一个指标达到了极限,然后那个容器就被 oom 杀死了。

【问题讨论】:

标签: kubernetes memory containers monitoring


【解决方案1】:

你是对的。我将尝试更详细地解决您的问题。

两个指标有什么区别?

container_memory_rss 等于来自/sys/fs/cgroups/memory/memory.status 文件的total_rss 的值:

// The amount of anonymous and swap cache memory (includes transparent
// hugepages).
// Units: Bytes.
RSS uint64 `json:"rss"`

匿名和交换缓存内存的总量(包括透明大页),它等于memory.status文件中total_rss的值。这不应与真正的 resident set size 或 cgroup 使用的物理内存量相混淆。 rss + file_mapped 将为您提供 cgroup 的常驻集大小。它不包括被换出的内存。只要这些库中的页面实际上在内存中,它就包含来自共享库的内存。它确实包括所有堆栈和堆内存。


container_memory_working_set_bytes(正如 Olesya 已经提到的)是total usage - inactive file。这是对无法驱逐多少内存的估计:

// The amount of working set memory, this includes recently accessed memory,
// dirty memory, and kernel memory. Working set is <= "usage".
// Units: Bytes.
WorkingSet uint64 `json:"working_set"`

Working Set 是此进程的工作集的当前大小(以字节为单位)。工作集是进程中的线程最近访问的内存页集。


哪些指标更适合监控内存使用情况?有帖子说 都是因为其中一个指标达到了极限,那么 容器被 oom 杀死了。

如果您的 pod 是 limiting the resource usage,那么您应该同时监控它们,因为如果它们达到特定的资源限制,它们将导致 oom-kill。

我还推荐this article,它显示了一个解释以下断言的示例:

您可能认为使用 container_memory_usage_bytes,但是,此指标还包括 缓存(想想文件系统缓存)可以在内存下驱逐的项目 压力。更好的指标是container_memory_working_set_bytes 这就是OOM杀手所关注的。

编辑:

添加一些额外的来源作为补充:

【讨论】:

  • 我发布了与此相关的another question。你也可以回顾一下吗?
  • 我刚做了。随意看看。
  • 我有一个类似的问题,我觉得答案没有清楚地区分 container_memory_rss 和 container_memory_working_set 的关系,因为在我的情况下,working_set 是 container_memory_rss 的 10 倍。此外,OP 问题有一个评论有一个 GitHub 链接,指出 working_set 不包括 inactive_file (所以没有交换缓存?)这再次不能解释为什么 rss 与 working_set 相比如此低,因为 rss 也包括交换缓存
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-30
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
相关资源
最近更新 更多