free的打印信息:
total used free shared buffers cached
Mem: 65970364 64966504 1003860 19296 766752 58405412
-/+ buffers/cache: 5794340 60176024
Swap: 33554428 15892 33538536
基本上需要获取内存信息都在/proc/meminfo文件,这里主要对该文件中的内容做一些简单说明,其中有一些参考
http://linuxperf.com/网址。
MemTotal:总的内存,系统从加点开始到引导完成,firmware/BIOS要保留一些内存,kernel本身要占用一些内存,最后剩下可供kernel支配的内存就是MemTotal。这个值在系统运行期间一般是固定不变的。
MemFree:系统尚未使用的内存,[MemTotal-MemFree]就是已被用掉的内存,但该字段并不代表可用内存,可用内存应使用MemAvailable字段
MemAvailable:有些应用程序会根据系统的可用内存大小自动调整内存申请的多少,所以需要一个记录当前可用内存数量的统计值,MemFree并不适用,因为MemFree不能代表全部可用内存,系统中有些内存虽然已被使用但是可以回收,比如cache/buffer、slab都有一部分可以回收,所以这部分可回收的内存加上MemFree才是系统可用的内存,即MemAvailable。
Buffers:块设备(block device)所占用的缓存页,包括:直接读写块设备、以及文件系统元数据(metadata)比如SuperBlock所使用的缓存页。它与“Cached”的区别在于,“Cached”表示普通文件所占用的缓存页。
Cached:从磁盘读取文件的页缓存(实际上好像也包含写操作的缓存)
SwapFree:交换区的空闲大小
SwapTotal:交换区的总大小
上面的free打印是老版本的free打印,新的添加了available,在文件/proc/meminfo中,并不一定有MemAvailable域,这个有时候需要单独计算。在老版本的free打印中,包含了”-/+ buffers/cache: 5794340 60176024“,第一个是通过公式used-buffers-cached计算出来的,表示实际使用的内存量,第二个值通过公式free+buffers+cached计算出来的,表示实际空闲的内存量。
个人感觉free+buffers+cached就是available,但实际上在新的free程序中关于availbale的算法要复杂许多,因为free+buffers+cached跟available好像差不多,所以我都是直接使用的free+buffers+cached表示实际可用内存,按照老版本的free程序,好像这样没什么问题。