Linux中的free命令

http://blog.csdn.net/wwww1988600/article/details/20545969node

解释一下Linux上free命令的输出。windows

下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样能够把free的输出当作一个二维数组FO(Free Output)。例如:数组

        FO[2][1] = 15402628 FO[3][2] = 12033012缓存

        free的输出一共有四行,第四行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free),这个比较清楚,不说太多。函数

free输出地第二行和第三行是比较让人迷惑的。这两行都是说明内存使用状况的。第一列是总量(total),第二列是使用量(used),第三列是可用量(free)。性能

第一行的输出时从操做系统(OS)来看的。也就是说,从OS的角度来看,计算机上一共有:测试

  • 15402628KB(缺省时free的单位为KB)物理内存,即FO[2][1];
  • 在这些物理内存中有15318812KB(即FO[2][2])被使用了;
  • 还用83816KB(即FO[2][3])是可用的;

        这里获得第一个等式:this

  • FO[2][1] = FO[2][2] + FO[2][3]

         FO[2][4]表示被几个进程共享的内存的,如今已经deprecated,其值老是0(固然在一些系统上也可能不是0,主要取决于free命令是怎么实现的)。操作系统

        FO[2][5]表示被OS buffer住的内存。FO[2][6]表示被OS cache的内存。在有些时候buffer和cache这两个词常常混用。不过在一些比较低层的软件里是要区分这两个词的,看         老外的洋文:.net

  • A buffer is something that has yet to be "written" to disk.
  • A cache is something that has been "read" from the disk and stored for later use.

         也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这两者是为了提升IO性能的,并由OS管理。

         Linux和其余成熟的操做系统(例如windows),为了提升IO read的性能,老是要多cache一些数据,这也就是为何FO[2][6](cached memory)比较大,而FO[2][3]比较          小的缘由。咱们能够作一个简单的测试:

         1.释放掉被系统cache占用的数据;

echo 3>/proc/sys/vm/drop_caches

2.读一个大文件,并记录时间;

         3.关闭该文件;

         4.重读这个大文件,并记录时间;

         第二次读应该比第一次快不少。原来我作过一个BerkeleyDB的读操做,大概要读5G的文件,几千万条记录。在个人环境上,第二次读比第一次大概能够快9倍左右。

free输出的第二行是从一个应用程序的角度看系统内存的使用状况。

  • 对于FO[3][2],即-buffers/cache,表示一个应用程序认为系统被用掉多少内存;
  • 对于FO[3][3],即+buffers/cache,表示一个应用程序认为系统还有多少内存;

         由于被系统cache和buffer占用的内存能够被快速回收,因此一般FO[3][3]比FO[2][3]会大不少。

        这里还用两个等式:

  • FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]
  • FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]

         这两者都不难理解。

free命令由procps.*.rpm提供(在Redhat系列的OS上)。free命令的全部输出值都是从/proc/meminfo中读出的。

       在系统上可能有meminfo(2)这个函数,它就是为了解析/proc/meminfo的。procps这个包本身实现了meminfo()这个函数。能够下载一个procps的tar包看看具体实现,如今最新版式3.2.8。

 

清除缓存的方法

To free pagecache:

echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches

说明,释放前最好sync一下,防止丢数据。

由于LINUX的内核机制,通常状况下不须要特地去释放已经使用的cache。这些cache起来的内容能够增长文件以及的读写速度。

 

有关/proc/sys/vm/drop_caches的用法在下面进行了说明
/proc/sys/vm/drop_caches (since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;

to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;

to free pagecache, dentries and inodes, use echo 3 >/proc/sys/vm/drop_caches. Because this is a non-destructive operation and dirty objects

相关文章
相关标签/搜索