container_memory_working_set_bytes` 与 `container_memory_usage_bytes` 的区别
在 Prometheus 中,container_memory_working_set_bytes
与 container_memory_usage_bytes
的区别如下:
-
计算方式及包含内容 :
container_memory_usage_bytes
:表示容器当前使用的总内存,包括所有内存,不管这些内存是否最近被访问过,也不管其是否可以被操作系统回收,即它包含了缓存、工作集等所有内存部分。container_memory_working_set_bytes
:是容器的当前工作集内存,计算方式为memory.usage_in_bytes - total_inactive_file
,其中total_inactive_file
表示可回收的文件系统缓存部分。简而言之,它是容器实际在用且操作系统不能回收的那部分内存,不包含可被系统回收的缓存。
-
数值大小 :由于
container_memory_usage_bytes
包含了更多的内存部分,其数值通常大于或等于container_memory_working_set_bytes
。 -
应用场景及与 OOM Killer 的关系 :
container_memory_usage_bytes
:适用于需要了解容器整体内存分配情况的场景,比如在分析容器的内存分配趋势、进行内存容量规划等时比较有用。但如果仅从这个指标来监控内存使用情况,可能会因为其包含缓存等因素,而不能准确反映容器对内存的实际压力状况。container_memory_working_set_bytes
:更贴近容器实际的内存使用压力情况,是 Kubernetes 中 OOM Killer 监控的关键指标。因为 OOM Killer 主要关注的是那些不可回收的、容器实际在用的内存,当容器的container_memory_working_set_bytes
达到内存限制时,可能会触发 OOM Killer 杀死该容器,以保证系统的整体稳定性。
通常情况下,container_memory_working_set_bytes
更适合用于评估容器的内存使用率,因为它能更准确地反映容器对内存的实际需求和压力,避免因缓存等因素导致的误判。例如,在监控容器内存使用率以进行水平扩展或资源分配时,使用 container_memory_working_set_bytes
能更合理地做出决策。