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

相關文章
相關標籤/搜索