过去从未仔细了解过使用 free
、top
等命令时显式的内存信息,只关注了已用内存 / 可用内存。本文我们详解解读和标注一下各个数据项的含义,同时和 Ganglia 显式的数据做一个映射。开始前介绍一个小知识,很多查看内存的命令行工具都是 cat /proc/meminfo
里的数据,所以数据来源都是一样的,区别只在于显式格式,用户体验上。本文我们以 free
命令为主,最后介绍一下 top
和 htop
的一些细微差异。先看下图:
第一行:
total
: 总的物理内存used
: 已用内存,是 total - free 的值free
: 可用内存(没有被任何进程占用的内存)shared
: 被 tmpfs 文件系统使用的内存,tmpfs 会将文件加载到内存中以便更快速的访问buffers
/ cached
: 由操作系统内核管理的内存空间,存放的是近期访问过的数据,可以认为是 OS 级别的缓存,显然从这里读取数据要比从磁盘读取快得多第二行:
-/+ buffers/cache used
: 真 ? 已用内存,是 used - ( buffers + cached )
后的值,这是直接被各个进程占用的真实内存,buffers
/ cached
值不应统计在内,因为当内存紧张时,它们也会被征用并分配给应用程序。Ganglia 中使用的 Used Mem 就是这个值!-/+ buffers/cache free
: 真 ? 可用内存,是 free + ( buffers + cached )
后的值,这是真正还可以拿来分配的总内存,buffers
/ cached
值应该统计在内,因为当内存紧张时,它们也会被征用并分配给应用程序。第二行的统计数据更具有实际参考意义!其实对于“已用内存”和“可用内存”这两个指标,第一行和第二行使用的两种统计口径,差别在于:buffers
/ cached
是算成已用内存还是可用内存,它们被操作系统管理,属于“可调节”的机动资源,应用程序占用的资源多时,buffers
/ cached
就多一些,反之就让渡出来给应用程序,所以它们被看成可用内存会更合理一些,所以说第二行数据更有参考价值,这也是 Ganglia 取 -/+ buffers/cache used
做“已用内存”的原因。
另外
使用 top
命令查看内存时是不显示 free
的第二行数据的;
使用 htop
命令查看内存时,是通过颜色来区分的:
参考:
https://www.turing.com/kb/how-to-use-the-linux-free-command
https://serverfault.com/questions/85470/meaning-of-the-buffers-cache-line-in-the-output-of-free