1. 程式人生 > >記憶體管理二 proc/meminfo 檔案詳解

記憶體管理二 proc/meminfo 檔案詳解

一、meminfo中引數的解釋:

cat  /proc/meminfo

MemTotal:        1859640 kB                         //可用的總記憶體
MemFree:           69836 kB                          //完全未用到的實體記憶體 LowFree+HighFree
MemAvailable:     507340 kB                       //MemAvailable ≈ MemFree+Buffers+Cached
Buffers:            7428 kB                               //緩衝區記憶體數
Cached:           462428 kB                           //快取區記憶體數
SwapCached:        17780 kB
Active:           548544 kB             //Active:(pages[LRU_ACTIVE_ANON]   + pages[LRU_ACTIVE_FILE])
Inactive:         552948 kB            //pages[LRU_INACTIVE_ANON] + pages[LRU_INACTIVE_FILE]

Active(anon):     315788 kB 
Inactive(anon):   319452 kB
Active(file):     232756 kB  
Inactive(file):   233496 kB
Unevictable:        1820 kB
Mlocked:               0 kB
HighTotal:       1366584 kB
HighFree:          26140 kB
LowTotal:         493056 kB
LowFree:           43696 kB

SwapTotal:       1048572 kB                   //可用的swap空間的總的大小
SwapFree:         642324 kB                   //剩餘swap空間的大小
Dirty:               148 kB                            //需要寫入磁碟的記憶體區大小
Writeback:             0 kB                         //正在被寫回磁碟的大小
AnonPages:        630600 kB                 //未對映頁的記憶體大小
Mapped:           351396 kB                   //裝置和檔案等對映的大小
Shmem:              1784 kB
Slab:             117972 kB                       //slab使用的記憶體
SReclaimable:      27540 kB                 //可收回Slab的大小
SUnreclaim:        90432 kB                   //不可回收的slab的大小
KernelStack:       17968 kB
PageTables:        46464 kB                  //管理記憶體分頁頁面的索引表的大小

NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1978392 kB
Committed_AS:   67525156 kB
VmallocTotal:     499712 kB                 //vmalloc記憶體區大小
VmallocUsed:           0 kB                    //vmalloc已經使用的記憶體
VmallocChunk:          0 kB                   //vmalloc區可用的連續最大塊的大小
CmaTotal:              0 kB
CmaFree:               0 kB

二、概述
(1)ACTIVE_ANON和ACTIVE_FILE,分別表示anonymous pages和mapped pages。

使用者程序的記憶體頁分為兩種:與檔案關聯的記憶體(比如程式檔案、資料檔案所對應的記憶體頁)

和與檔案無關的記憶體(比如程序的堆疊,用malloc申請的記憶體),前者稱為file pages或mapped pages,

後者稱為anonymous pages;其中LRU lists包括如下幾種,在/proc/meminfo中都有對應的統計值:

LRU_INACTIVE_ANON  –  對應 Inactive(anon)
LRU_ACTIVE_ANON  –  對應 Active(anon)
LRU_INACTIVE_FILE  –  對應 Inactive(file)
LRU_ACTIVE_FILE  –  對應 Active(file)
LRU_UNEVICTABLE  –  對應 Unevictable

      Inactive list裡的是長時間未被訪問過的記憶體頁,Active list裡的是最近被訪問過的記憶體頁,

LRU演算法利用Inactive list和Active list可以判斷哪些記憶體頁可以被優先回收。

(2)MemAvailable

      應用程式可用記憶體數。系統中有些記憶體雖然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以

MemFree不能代表全部可用的記憶體,這部分可回收的記憶體加上MemFree才是系統可用的記憶體,即:

MemAvailable≈MemFree+Buffers+Cached,它是核心使用特定的演算法計算出來的,是一個估計值。

 

作者:frank_zyp 
您的支援是對博主最大的鼓勵,感謝您的認真閱讀。 
本文無所謂版權,歡迎轉載。