container_memory_working_set_bytes` 与 `container_memory_usage_bytes` 的区别

在 Prometheus 中,container_memory_working_set_bytescontainer_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 能更合理地做出决策。

你可能感兴趣的:(prometheus,容器,docker,k8s)