linux内存监控
要明白docker容器内存是如何计算的,首先要明白linux中内存的相关概念。
使用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: