總有人愛問buffer cache什麼區別,通常我的回答百度一下就出來了,今天就徹底百度下,總結總結。以後就說:“去看小鵬的筆記去,這都不知道。”
free命令可以顯示Linux系統中空閒的、已用的物理內存及swap內存,及被內核使用的buffer。在Linux系統監控的工具中,free命令是最經常使用的命令之一。
1.命令格式:
free [參數]
2.命令功能:
free 命令顯示系統使用和空閒的內存情況,包括物理內存、交互區內存(swap)和內核緩衝區內存。共享內存將被忽略
3.命令參數:
-b 以Byte爲單位顯示內存使用情況。
-k 以KB爲單位顯示內存使用情況。
-m 以MB爲單位顯示內存使用情況。
-g 以GB爲單位顯示內存使用情況。
-o 不顯示緩衝區調節列。
-s<間隔秒數> 持續觀察內存使用狀況。
-t 顯示內存總和列。
-V 顯示版本信息。
標題解釋
total:總計物理內存的大小。
used:已使用多大。
free:可用有多少。
Shared:多個進程共享的內存總額。
Buffers/cached:磁盤緩存的大小。
-
第一行的輸出時從操作系統(OS)來看的。也就是說,從OS的角度來看,計算機上一共有:
total:1004348KB(缺省時free的單位爲KB)物理內存;
used:在這些物理內存中有485308KB被使用了;
free:519040KB是可用的;
buffer:59424表示被OS buffer住的內存。
cache:257760表示被OS cache的內存。
公式:total=used+free
也就是說buffer是用於存放要輸出到disk(塊設備)的數據的,而cache是存放從disk上讀出的數據。這二者是爲了提高IO性能的,並由OS管理。看下面圖示
-
第二行是從一個應用程序的角度看系統內存的使用情況。
-buffers/cache,表示一個應用程序認爲系統被用掉多少內存;
+buffers/cache,表示一個應用程序認爲系統還有多少內存;
基於應用角度考慮(計算已使用內存時減去buffers/cache,計算可使用內存時加上buffers/cache)的內存情況,也可理解爲真實的內存使用情況。
這裏的話我係統可用內存實際爲:可用823M,已使用156M,而不是513M和467M.
這裏還用兩個等式:
156 =used(467) - buffers(58) - cached(251)
823 = free(513) + buffers(58) + cached(251)
-
第三行是交換分區SWAP的,也就是我們通常所說的虛擬內存。
Linux內核爲了提高讀寫效率與速度,會將文件在內存中進行緩存,這部分內存就是Cache Memory(緩存內存)。即使你的程序運行結束後,Cache Memory也不會自動釋放。這就會導致你在Linux系統中程序頻繁讀寫文件後,你會發現可用物理內存變少。當系統的物理內存不夠用的時候,就需要將物理內存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什麼操作的程序,這些被釋放的空間被臨時保存到Swap空間中,等到那些程序要運行時,再從Swap分區中恢復保存的數據到內存中。這樣,系統總是在物理內存不夠時,才進行Swap交換。