【发布时间】:2021-09-18 05:06:32
【问题描述】:
我正在寻找了解的关系
container_memory_working_set_bytes vs process_resident_memory_bytes vs total_rss (container_memory_rss) + file_mapped 以便更好地配备警报系统OOM 的可能性。
考虑到 如果容器/pod 正在运行单个进程执行用 Go 编写的编译程序,这似乎与我的理解不符(这让我现在感到困惑)。
为什么container_memory_working_set_bytes 与process_resident_memory_bytes 之间的差异如此之大(将近10 倍)
还有container_memory_working_set_bytes和container_memory_rss + file_mapped之间的关系在这里很奇怪,是我没想到的,看了here之后
匿名和交换缓存内存的总量(包括透明的hugepages),它等于memory.status文件中total_rss的值。这不应与真正的驻留集大小或 cgroup 使用的物理内存量相混淆。 rss + file_mapped 将为您提供 cgroup 的常驻集大小。它不包括被换出的内存。只要这些库中的页面实际上在内存中,它就包含来自共享库的内存。它确实包括所有堆栈和堆内存。
所以cgroup的总驻留集大小是rss + file_mapped对于在给定cgroup中运行的容器,这个值怎么小于container_working_set_bytes
这让我觉得这些统计数据不正确。
以下是用于构建上图的 PROMQL
- process_resident_memory_bytes{container="sftp-downloader"}
- container_memory_working_set_bytes{container="sftp-downloader"}
- go_memstats_heap_alloc_bytes{container="sftp-downloader"}
- container_memory_mapped_file{container="sftp-downloader"} + container_memory_rss{container="sftp-downloader"}
【问题讨论】:
-
go_memstats_heap_inuse_bytes 怎么样?无论如何,container_memory_working_set_bytes 是更值得信赖的指标。
-
同意,但人们指的是 watch for container_memory_rss 和 working_set 都用于 OOM kill。并且下划线认为我打算了解 rss 与 working_set 的关系
-
看到这对于我正在寻找的问题没有用
标签: go kubernetes cgroups cadvisor kubernetes-metrics