Docker容器内存监控(2)

cgroup中的memory子系统为hierarchy提供了如下文件。

[root@localhost ~]$ ll /cgroup/memory/docker/53a11f13c08099dd6d21030dd2ddade54d5cdd7ae7e9e68f5ba055ad28498b6f/ 总用量 0 --w--w--w- 1 root root 0 2月 22 12:51 cgroup.event_control -rw-r--r-- 1 root root 0 5月 25 17:07 cgroup.procs -rw-r--r-- 1 root root 0 2月 22 12:51 memory.failcnt --w------- 1 root root 0 2月 22 12:51 memory.force_empty -rw-r--r-- 1 root root 0 3月 30 17:06 memory.limit_in_bytes -rw-r--r-- 1 root root 0 2月 22 12:51 memory.max_usage_in_bytes -rw-r--r-- 1 root root 0 2月 22 12:51 memory.memsw.failcnt -rw-r--r-- 1 root root 0 3月 30 17:06 memory.memsw.limit_in_bytes -rw-r--r-- 1 root root 0 2月 22 12:51 memory.memsw.max_usage_in_bytes -r--r--r-- 1 root root 0 2月 22 12:51 memory.memsw.usage_in_bytes -rw-r--r-- 1 root root 0 2月 22 12:51 memory.move_charge_at_immigrate -rw-r--r-- 1 root root 0 2月 22 12:51 memory.oom_control -rw-r--r-- 1 root root 0 3月 30 17:06 memory.soft_limit_in_bytes -r--r--r-- 1 root root 0 2月 22 12:51 memory.stat -rw-r--r-- 1 root root 0 2月 22 12:51 memory.swappiness -r--r--r-- 1 root root 0 2月 22 12:51 memory.usage_in_bytes -rw-r--r-- 1 root root 0 2月 22 12:51 memory.use_hierarchy -rw-r--r-- 1 root root 0 2月 22 12:51 notify_on_release -rw-r--r-- 1 root root 0 2月 22 12:51 tasks

这些文件的具体含义可以查看相关资料cgroup memory
这里主要介绍几个与docker监控相关的。

文件名说明
memory.usage_in_bytes   已使用的内存量(包含cache和buffer)(字节),相当于linux的used_meme  
memory.limit_in_bytes   限制的内存总量(字节),相当于linux的total_mem  
memory.failcnt   申请内存失败次数计数  
memory.memsw.usage_in_bytes   已使用的内存和swap(字节)  
memory.memsw.limit_in_bytes   限制的内存和swap容量(字节)  
memory.memsw.failcnt   申请内存和swap失败次数计数  
memory.stat   内存相关状态  

以下为一个容器的样例。

[root@localhost 53a11f13c08099dd6d21030dd2ddade54d5cdd7ae7e9e68f5ba055ad28498b6f]$ cat memory.usage_in_bytes 135021858816 [root@localhost 53a11f13c08099dd6d21030dd2ddade54d5cdd7ae7e9e68f5ba055ad28498b6f]$ cat memory.memsw.usage_in_bytes 135679291392 [root@localhost 53a11f13c08099dd6d21030dd2ddade54d5cdd7ae7e9e68f5ba055ad28498b6f]$ cat memory.stat cache 134325506048 rss 695980032 mapped_file 16155119616 pgpgin 21654116032 pgpgout 21705492352 swap 655171584 inactive_anon 4218880 active_anon 74202603520 inactive_file 8365199360 active_file 52449439744 unevictable 0 hierarchical_memory_limit 137438953472 hierarchical_memsw_limit 274877906944 total_cache 134325506048 total_rss 695980032 total_mapped_file 16155119616 total_pgpgin 21654116032 total_pgpgout 21705492352 total_swap 655171584 total_inactive_anon 4218880 total_active_anon 74202603520 total_inactive_file 8365199360 total_active_file 52449439744 total_unevictable 0 memory.stat

memory.stat包含有最丰富的

统计描述
cache   页缓存,包括 tmpfs(shmem),单位为字节  
rss   匿名和 swap 缓存,不包括 tmpfs(shmem),单位为字节  
mapped_file   memory-mapped 映射的文件大小,包括 tmpfs(shmem),单位为字节  
pgpgin   存入内存中的页数  
pgpgout   从内存中读出的页数  
swap   swap 用量,单位为字节  
active_anon   在活跃的最近最少使用(least-recently-used,LRU)列表中的匿名和 swap 缓存,包括 tmpfs(shmem),单位为字节  
inactive_anon   不活跃的 LRU 列表中的匿名和 swap 缓存,包括 tmpfs(shmem),单位为字节  
active_file   活跃 LRU 列表中的 file-backed 内存,以字节为单位  
inactive_file   不活跃 LRU 列表中的 file-backed 内存,以字节为单位  
unevictable   无法再生的内存,以字节为单位  
hierarchical_memory_limit   包含 memory cgroup 的层级的内存限制,单位为字节  
hierarchical_memsw_limit   包含 memory cgroup 的层级的内存加 swap 限制,单位为字节  

active_anon + inactive_anon = anonymous memory + file cache for tmpfs + swap cache

active_file + inactive_file = cache - size of tmpfs

docker原生内存监控

再来说到docker原生的docker stats。其具体实现在中可以看到。其将容器的内存监控分为cache,usage,swap usage,kernel usage,kernel tcp usage。

其中cache是从memory.stat中的cache中获取。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/85737d50699f271060bd82b048410f1f.html