prometheus监控pod相关指标

背景介绍

临近618了,昨天开发同事来找我,问我为啥看grafana监控,我的服务内存随着压测一直在增长,不释放呢。然后给我看了监控的图。

其实是因为监控pod指标的值用了 container_memory_usage_bytes ,是包含cache的,所以感觉是一直不释放,今天就详细说下这些指标的含义。

容器监控的内存相关指标

名称 类型 单位 说明
container_memory_rss gauge 字节数bytes RSS内存,即常驻内存集(Resident Set Size),是分配给进程使用实际物理内存,而不是磁盘上缓存的虚拟内存。RSS内存包括所有分配的栈内存和堆内存,以及加载到物理内存中的共享库占用的内存空间,但不包括进入交换分区的内存。
container_memory_usage_bytes gauge 字节数bytes 当前使用的内存量,包括所有使用的内存,不管有没有被访问。
container_memory_max_usage_bytes gauge 字节数bytes 最大内存使用量的记录。
container_memory_cache gauge 字节数bytes 高速缓存(cache)的使用量。cache是位于CPU与主内存间的一种容量较小但速度很高的存储器,是为了提高cpu和内存之间的数据交换速度而设计的。
container_memory_swap gauge 字节数bytes 虚拟内存使用量。虚拟内存(swap)指的是用磁盘来模拟内存使用。当物理内存快要使用完或者达到一定比例,就可以把部分不用的内存数据交换到硬盘保存,需要使用时再调入物理内存
container_memory_working_set_bytes gauge 字节数bytes 当前内存工作集(working set)使用量。
container_memory_failcnt counter 申请内存失败次数计数
container_memory_failures_total counter 累计的内存申请错误次数
1
container_memory_max_usage_bytes > container_memory_usage_bytes >= container_memory_working_set_bytes > container_memory_rss

如果说开发想看自己应用实际内存占用,那就可以用rss,表达式如下:

1
sum by(container_name) (container_memory_rss{pod_name="$pod", container_name=~"$container", container_name!="POD"})

容器如果做了lxcfs,也可以top去看java进程的内存。

Donate