內存的各指標計算方法(參考free和vmstat)

free的打印信息:

             total       used       free     shared    buffers     cached
Mem:      65970364   64966504    1003860      19296     766752   58405412
-/+ buffers/cache:    5794340   60176024
Swap:     33554428      15892   33538536

基本上需要獲取內存信息都在/proc/meminfo文件,這裏主要對該文件中的內容做一些簡單說明,其中有一些參考

http://linuxperf.com/網址。

MemTotal:總的內存,系統從加點開始到引導完成,firmware/BIOS要保留一些內存,kernel本身要佔用一些內存,最後剩下可供kernel支配的內存就是MemTotal。這個值在系統運行期間一般是固定不變的。

MemFree:系統尚未使用的內存,[MemTotal-MemFree]就是已被用掉的內存,但該字段並不代表可用內存,可用內存應使用MemAvailable字段

MemAvailable:有些應用程序會根據系統的可用內存大小自動調整內存申請的多少,所以需要一個記錄當前可用內存數量的統計值,MemFree並不適用,因爲MemFree不能代表全部可用內存,系統中有些內存雖然已被使用但是可以回收,比如cache/buffer、slab都有一部分可以回收,所以這部分可回收的內存加上MemFree纔是系統可用的內存,即MemAvailable。

Buffers:塊設備(block device)所佔用的緩存頁,包括:直接讀寫塊設備、以及文件系統元數據(metadata)比如SuperBlock所使用的緩存頁。它與“Cached”的區別在於,“Cached”表示普通文件所佔用的緩存頁。

Cached:從磁盤讀取文件的頁緩存(實際上好像也包含寫操作的緩存)

SwapFree:交換區的空閒大小

SwapTotal:交換區的總大小

上面的free打印是老版本的free打印,新的添加了available,在文件/proc/meminfo中,並不一定有MemAvailable域,這個有時候需要單獨計算。在老版本的free打印中,包含了”-/+ buffers/cache:    5794340   60176024“,第一個是通過公式used-buffers-cached計算出來的,表示實際使用的內存量,第二個值通過公式free+buffers+cached計算出來的,表示實際空閒的內存量。

個人感覺free+buffers+cached就是available,但實際上在新的free程序中關於availbale的算法要複雜許多,因爲free+buffers+cached跟available好像差不多,所以我都是直接使用的free+buffers+cached表示實際可用內存,按照老版本的free程序,好像這樣沒什麼問題。

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