背景介绍
临近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进程的内存。