free命令、buffer與cache的區別

free
free 命令相對於top 提供了更簡潔的查看系統內存使用情況:
 

# free
             total       used       free     shared    buffers     cached
Mem:        255988     231704      24284          0       6432     139292
-/+ buffers/cache:      85980     170008
Swap:       746980          0     746980


Mem:表示物理內存統計 
-/+ buffers/cached:表示物理內存的緩存統計 
Swap:表示硬盤上交換分區的使用情況,這裏我們不去關心。
系統的總物理內存:255988Kb(256M),但系統當前真正可用的內存並不是第一行free 標記的 24284Kb,它僅代表未被分配的內存。

我們使用total1、used1、free1、used2、free2 等名稱來代表上面統計數據的各值,1、2 分別代表第一行和第二行的數據。

total1:表示物理內存總量。 
used1:表示總計分配給緩存(包含buffers 與cache )使用的數量,但其中可能部分緩存並未實際使用。 
free1:未被分配的內存。 
shared1:共享內存,一般系統不會用到,這裏也不討論。 
buffers1:系統分配但未被使用的buffers 數量。 
cached1:系統分配但未被使用的cache 數量。buffer 與cache 的區別見後面。 
used2:實際使用的buffers 與cache 總量,也是實際使用的內存總量。 
free2:未被使用的buffers 與cache 和未被分配的內存之和,這就是系統當前實際可用內存。


可以整理出如下等式:

total1 = used1 + free1

total1 = used2 + free2

used1 = buffers1 + cached1 + used2

free2 = buffers1 + cached1 + free1

buffer 與cache 的區別
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.

 

兩者都是RAM中的數據。簡單來說,buffer是即將要被寫入磁盤的,cache是被從磁盤中讀出來的。
buffer是由各種進程分配的,被用在如輸入隊列等方面,一個簡單的例子如某個進程要求有多個字段讀入,在所有字段被讀入完整之前,進程把先前讀入的字段放在buffer中保存。
cache經常被用在磁盤的I/O請求上,如果有多個進程都要訪問某個文件,於是該文件便被做成cache以方便下次被訪問,這樣可提供系統性能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章