Docker容器内存监控

使用free命令可以查看当前内存使用情况。

[root@localhost ~]$ free total used free shared buffers cached Mem: 264420684 213853512 50567172 71822688 2095364 175733516 -/+ buffers/cache: 36024632 228396052 Swap: 16777212 1277964 15499248

这里有几个概念:

mem: 物理内存

swap: 虚拟内存。即可以把数据存放在硬盘上的数据

shared: 共享内存。存在在物理内存中。

buffers: 用于存放要输出到disk(块设备)的数据的

cached: 存放从disk上读出的数据

可以参考这里

为方便说明,我对free的结果做了一个对应。

[root@localhost ~]$ free total used free shared buffers cached Mem: total_mem used_mem free_mem shared_mem buffer cache -/+ buffers/cache: real_used real_free Swap: total_swap used_swap free_swap 名称说明
total_mem   物理内存总量  
used_mem   已使用的物理内存量  
free_mem   空闲的物理内存量  
shared_mem   共享内存量  
buffer   buffer所占内存量  
cache   cache所占内存量  
real_used   实际使用的内存量  
real_free   实际空闲的内存量  
total_swap   swap总量  
used_swap   已使用的swap  
free_swap   空闲的swap  

一般认为,buffer和cache是还可以再进行利用的内存,所以在计算空闲内存时,会将其剔除。
因此这里有几个等式:

real_used = used_mem - buffer - cache real_free = free_mem + buffer + cache total_mem = used_mem + free_mem

了解了这些,我们再来看free的数据源。其实其数据源是来自于/proc/memeinfo文件。

[root@localhost ~]$ cat /proc/meminfo MemTotal: 264420684 kB MemFree: 50566436 kB Buffers: 2095356 kB Cached: 175732644 kB SwapCached: 123688 kB Active: 165515340 kB Inactive: 37004224 kB Active(anon): 92066880 kB Inactive(anon): 4455076 kB Active(file): 73448460 kB Inactive(file): 32549148 kB Unevictable: 362900 kB Mlocked: 74696 kB SwapTotal: 16777212 kB SwapFree: 15499248 kB Dirty: 2860 kB Writeback: 0 kB AnonPages: 24932928 kB Mapped: 58165040 kB Shmem: 71822688 kB Slab: 8374496 kB SReclaimable: 8163096 kB SUnreclaim: 211400 kB KernelStack: 45824 kB PageTables: 606296 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 148987552 kB Committed_AS: 114755628 kB VmallocTotal: 34359738367 kB VmallocUsed: 772092 kB VmallocChunk: 34225428328 kB HardwareCorrupted: 0 kB AnonHugePages: 22083584 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 7168 kB DirectMap2M: 2015232 kB DirectMap1G: 266338304 kB docker

说完linux的内存,我们再来看下docker的内存监控。docker自身提供了一种内存监控的方式,即可以通过docker stats对容器内存进行监控。
该方式实际是通过对cgroup中相关数据进行取值从而计算得到。

cgroup

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

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