解釋一下linux上free命令的輸出。
下面是free的執行結果,一共有4行。為了方便說明,我加上了列號。這樣可以把free的輸出看成乙個二維陣列fo(free output)。例如:
1 2 3 4 5 6
1 total used free shared buffers cached
2 mem: 24677460 23276064 1401396 0 870540 12084008
3 -/+ buffers/cache: 10321516 14355944
4 swap: 25151484 224188 24927296
free的輸出一共有四行,第四行為交換區的資訊,分別是交換的總量(total),使用量(used)和有多少空閒的交換區(free),這個比較清楚,不說太多。
free輸出地第二行和第三行是比較讓人迷惑的。這兩行都是說明記憶體使用情況的。第一列是總量(total),第二列是使用量(used),第三列是可用量(free)。
第一行的輸出時從作業系統(os)來看的。也就是說,從os的角度來看,計算機上一共有:
這裡得到第乙個等式:
fo[2][4]表示被幾個程序共享的記憶體的,現在已經deprecated,其值總是0(當然在一些系統上也可能不是0,主要取決於free命令是怎麼實現的)。
fo[2][5]表示被os buffer住的記憶體。fo[2][6]表示被os cache的記憶體。在有些時候buffer和cache這兩個詞經常混用。不過在一些比較低層的軟體裡是要區分這兩個詞的,看老外的洋文:
也就是說buffer是用於存放要輸出到disk(塊裝置)的資料的,而cache是存放從disk上讀出的資料。這二者是為了提高io效能的,並由os管理。
linux和其他成熟的作業系統(例如windows),為了提高io read的效能,總是要多cache一些資料,這也就是為什麼fo[2][6](cached memory)比較大,而fo[2][3]比較小的原因。我們可以做乙個簡單的測試:
釋放掉被系統cache占用的資料;
echo
3>/
proc
/sys/vm
/drop_caches
讀乙個大檔案,並記錄時間;
關閉該檔案;
重讀這個大檔案,並記錄時間;
第二次讀應該比第一次快很多。原來我做過乙個berkeleydb的讀操作,大概要讀5g的檔案,幾千萬條記錄。在我的環境上,第二次讀比第一次大概可以快9倍左右。
free輸出的第二行是從乙個應用程式的角度看系統記憶體的使用情況。
因為被系統cache和buffer占用的記憶體可以被快速**,所以通常fo[3][3]比fo[2][3]會大很多。
這裡還用兩個等式:
這二者都不難理解。
free命令由procps.*.rpm提供(在redhat系列的os上)。free命令的所有輸出值都是從/proc/meminfo中讀出的。
linux free 顯示系統記憶體情況
free 引數 free 命令顯示系統使用和空閒的記憶體情況,包括物理記憶體 互動區記憶體 swap 和核心緩衝區記憶體 buffer 共享記憶體將被忽略.b 以byte為單位顯示記憶體使用情況。k 以kb為單位顯示記憶體使用情況。m 以mb為單位顯示記憶體使用情況。g 以gb為單位顯示記憶體使用情...
Linux free命令詳解
free命令統計出來的記憶體非常具有迷惑性,現在總結如下 第一部分mem行 total 記憶體總數 7863m userd 已經使用的記憶體使用總數 7039m free 剩餘的記憶體總數 823m share 當前已經廢棄不用的記憶體總數 0 buffers 當前被使用的快取大小 583m cac...
linux free命令詳解
free m total used free shared buffers cached mem 1002 769 232 0 62 421 buffers cache 286 715 swap 1153 0 1153 第一部分mem行 total 記憶體總數 1002m used 已經使用的記憶體...