持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天,点击查看活动详情
在Linux操作系统中查看系统内存最准确的方法是查看/proc/meminfo节点,它包含当前时刻系统的所有物理页面的信息。
root@benshushu:~# cat /proc/meminfo
MemTotal: 737696 KB
MemFree: 574684 KB
MemAvailable: 611380 KB
Buffers: 4616 KB
Cached: 91284 KB
SwapCached: 0 KB
Active: 42676 KB
Inactive: 68768 KB
Active(anon): 15668 KB
Inactive(anon): 4704 KB
Active(file): 27008 KB
Inactive(file): 64064 KB
Unevictable: 0 KB
Mlocked: 0 KB
SwapTotal: 0 KB
SwapFree: 0 KB
...
meminfo节点实现在meminfo_proc_show()函数中,该函数实现在fs/proc/meminfo.c。meminfo节点显示的内容如表所示。
-
MemTotal 系统当前可用物理内存总量,通过读取全局变量_totalram_pages来获得
-
MemFree 系统当前剩余空闲物理内存,通过读取全局变量vm_zone_stat[]数组中的NR_FREE_PAGES来获得
-
MemAvailable 系统中可使用页面的数量,由si_mem_available()函数来计算。公式为Available = memfree + pagecache + reclaimable−totalreserve_pages。这里包括了空闲页面(memfree)、文件映射页面(pagecache)、可回收的页面(reclaimable),最后减去系统保留的页面
-
Buffers 用于块层的缓存,由nr_blockdev_pages()函数来计算
-
Cached 用于页面高速缓存的页面。计算公式为Cached = NR_FILE_PAGES – swap_cache − Buffers
-
SwapCached 这里统计交换缓存的数量,交换缓存类似于内容缓存,只不过它对应的是交换分区,而内容缓存对应的是文件。这里表示匿名页面曾经被交换出去,现在又被交换回来,但是页面内容还在交换缓存中
-
Active 活跃的匿名页面(LRU_ACTIVE_ANON)和活跃的文件映射页面(LRU_ACTIVE_FILE)
-
Inactive 不活跃的匿名页面(LRU_INACTIVE_ANON)和不活跃的文件映射页面(LRU_INACTIVE_FILE)
-
Active(anon) 活跃的匿名页面(LRU_ACTIVE_ANON)
-
Inactive(anon) Active(file) 活跃的文件映射页面(LRU_ACTIVE_FILE)
-
Inactive(file) 不活跃的文件映射页面(LRU_INACTIVE_FILE)
-
Unevictable 不能回收的页面(LRU_UNEVICTABLE)
-
Mlocked 不会被交换到交换分区的页面,由全局的vm_zone_stat [ ]中的NR_MLOCK来统计
-
SwapTotal 交换分区的大小
-
SwapFree 交换分区的空闲空间大小
-
Dirty 脏页的数量,由全局的vm_node_stat[ ]中的NR_FILE_DIRTY来统计
-
Writeback 正在回写的页面数量,由全局的vm_node_stat[ ]中的NR_WRITEBACK来统计
-
AnonPages 统计有反向映射(RMAP)的页面,通常这些页面都是匿名页面并且都映射到了用户空间,但是并不是所有匿名页面都配置了反向映射,如部分的shmem和tmpfs页面就没有设置反向映射。这个计数由全局的vm_node_stat[ ]中的NR_ANON_MAPPED来统计
-
Mapped 统计所有映射到用户地址空间的内容缓存页面,由全局的vm_node_stat[ ]中的NR_FILE_MAPPED来统计
-
Shmem 共享内存(基于tmpfs实现的shmem、devtmfs等)页面的数量,由全局的vm_node_stat[]中的NR_SHMEM来统计
-
KReclaimable 内核可回收的内存,包括可回收的slab页面(NR_SLAB_RECLAIMABLE)和其他的可回收的内核页面(NR_KERNEL_MISC_RECLAIMABLE)
-
Slab 所有slab页面,包括可回收的slab页面(NR_SLAB_RECLAIMABLE)和不可回收的slab页面(NR_SLAB_UNRECLAIMABLE)
-
SReclaimable 可回收的slab页面(NR_SLAB_RECLAIMABLE)
-
SUnreclaim 不可回收的slab页面(NR_SLAB_UNRECLAIMABLE)