一、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
您的支持是对博主最大的鼓励,感谢您的认真阅读。
本文无所谓版权,欢迎转载。