free主要用于显示总的空闲内存、使用的物理和交换内存。
free的常用参数是指定内存大小单位,包括-b、-k、-m,默认是-k,一般我都会用-m,比如:
#free -m
free一共输出4行:
第1行用于指定每列的含义。
第4行显示交换区信息,
分别是交换的总共(total)、已用(used)、空闲(free)的交换区大小
,以上图为例:
总共8191M,已用11M,空闲8180M,从中不难看出:8191=11+8180,即total=used+free。
第2行表示从OS的角度来看,
总共(total)、已用(used)、空闲(free)、共享(shared)、(buffers)、(cached)的内存大小,以上图为例:
总共3823M,已用3577M,空闲246M,从中不难看出:3823=3577+246,即total=used+free。
共享(shared)表示被几个进程共享的内存大小,不过现在已经废弃,其值总是0。
buffers和cached二者都由OS管理,用于提供IO性能,其中,buffers表示被OS buffer住的内存,用于存放要输出到disk的数据,而cached表示被OS cache住的内存,用于存放从disk上读出的数据,举例说明之:
1、释放掉被系统cached住的数据:
#echo 3>/proc/sys/vm/drop_caches
2、读一个大文件,比如2G,并记录读文件花费的时间
3、关闭文件
4、重新读取该大文件,并记录读文件花费的时间
比较2次读取文件花费的时间,你会发现后者比前者花费的时间少得多,知道作用了吧
。
第3行表示从应用程序的角度来看,
已用(used)、空闲(free)的内存大小,以上图为例:
已用1875M,空闲1948M
,这两个值表示应用程序认为系统已用和空闲内存。
结合第2行和第3行的几列值中不难看出:
已用内存:1875=3577-36-1666,即[3][2]=[2][2]-[2][5]-[2][6]。
空闲内存:1948=246+36+1666,即[3][3]=[2][3]+[2][5]+[2][6]。
是不是有点头晕,仔细想想就能明白其中道理
。
free命令的所有输出值都是从/proc/meminfo中读出的,具体实现可以参看procps-xxx.tar包中meminfo()函数源码。
阅读(2439) | 评论(1) | 转发(0) |