記憶體管理二 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
您的支援是對博主最大的鼓勵,感謝您的認真閱讀。
本文無所謂版權,歡迎轉載。