聊聊 Linux 的内存统计( 二 )

RAM减去保留的以及内核代码占用的,系统启动后一般固定不变)

  • MemFree — 总的全局未使用内存大小
  • MemAvailable — 内核估计出来的全局可用内存大小,非精确值(MemFree不代表所有可用的内存,Cache/BufferSlab均有部分可以临时释放的内存要计算在内)
  • 用户进程的内存页分为两种:
    1. 与文件关联的内存页(File-backed Pages), 比如程序文件、读取文件时数据对应的缓存页
    2. 与文件无关的匿名内存页(Anonymous Pages),比如进程的堆、栈等分配的内存
    所有Page Cache里的页面都是File-backed PagesFile-backed Pages在内存不足的时候可以直接写回对应的硬盘文件里,即Page-out 。而Anonymous Pages在内存不足时就只能写到硬盘上的交换区Swap里来释放内存,称之为Swap-out
    Anonymous Pages与用户进程共存,进程退出则Anonymous pages释放,而Page Cache即使在进程退出后还可以缓存 。
    下面是磁盘缓存相关的统计项:
    • Buffers — 块设备所占用的缓存页,比如磁盘文件系统的meta信息如SuperBlock等,直接读写块设备产生的缓存也统计在这里(例如dd命令)
    • Cached — 从磁盘读取的文件内容缓存(即Page cache
    • SwapCached — Swap中包含的确定要被换出,但是尚未写入物理交换区的匿名内存页
    • SwapTotal — 可用的磁盘Swap总大小
    • SwapFree — 磁盘Swapfree大小
    • Dirty — 修改了等待写回磁盘的内存大小
    • Writeback — 正在写回磁盘的内存大小
    以下几项和内核的页面回收算法(Page Frame Reclaiming)相关,Page Cache和所有用户进程的内存(除内核栈和HugePages外)都在相关的LRU Lists上 。内核在 2.6 以前就引入了增强的LRU算法来解决朴素的LRU算法完全不考虑使用频率的问题 。具体的Active 链表Inactive 链表的使用详情请参阅其他资料 。
    • Active — 最近使用的内存,回收的优先级低
    • Inactive — 最近较少使用的内存,回收的优先级高
    • Active (anon) — Active 链表中的匿名页(Anonymous Pages)部分
    • Inactive (anon) — Inactive 链表中的匿名页(Anonymous Pages)部分
    • Active (file) — Active 链表中的File-backed Pages部分
    • Inactive (file) — Inactive 链表中的File-backed Pages部分
    • Unevictable — 禁止换出的页,对应Unevictable 链表,其中包括VM_LOCKED的内存页、SHM_LOCK的共享内存页(也统计在Mlocked中)、和Ramfs
    • Mlocked — mlock系统调用锁定的内存大小
    共享内存在 Linux 中细分的话可以分为以下几种:
    • SystemV Shared Memory — shmget
    • POSIX Shared Memory — shm_open
    • Shared Anonymous Memory — mmap(MAP_ANONYMOUS | MAP_SHARED)
    共享内存在内核中都是 基于tmpf机制实现 的 。因为基于文件系统所以就不能算是匿名页,不能计入AnonPages的统计项,而只能计入CachedMApped统计项 。但是,tmpfs背后并没有真实的磁盘文件存在,如果想要被临时释放出来,只能通过Swap的方式,所以内存页被链接到了Inactive(anon)Active(anon)里 。
    也就是说,共享内存的页面属于File-backed Pages,但是被放在Inactive(anon)Active(anon)链表里,统计也不算在AnonPages里,而是算在CachedMapped里 。特别地,如果这些页被mlock的话,就放在Unevictable链里并计算在内 。所以从数值上看,Inactive(anon)项 +Active(anon)项 不等于AnonPages项,因为前者包括共享内存的部分 。Active(file)项 +Inactive(file)项 也不等于M


    推荐阅读