首页 > 其他分享 >meminfo

meminfo

时间:2024-09-03 16:19:03浏览次数:10  
标签:kB meminfo Inactive 内存 file Active 内核

meminfo

Documentation/filesystem/proc.rstmeminfo的描述如下:

Provides information about distribution and utilization of memory. This
varies by architecture and compile options.

/proc/meminfo以各种维度对内存的使用和分布情况进行了统计,用于查看内存使用情况的free命令就是基于/proc/meminfo接口文件的数据进行加工的。

输出解析

下面的输出来自于Linux v4.19,没有开启CONFIG_HIGHMEM、透明巨页的等特性,没有开启内存交换。

MemTotal:       16130120 kB # 所有的可用内存,RAM总量减去了一些保留位和内核的二进制代码
MemFree:          293432 kB # 所有未分配的内存
MemAvailable:   14905192 kB # 空闲内存加上在保障内核稳定运行的情况下可以回收的内存,是一个估计值。
                            # 大概是MemFree+SReclaimable+Active(file)+Inactive(file)的基础上考虑每个内存域的low水线。
Buffers:          273432 kB # 磁盘块的临时存储,不会很大,一般在20MB左右
Cached:         12240900 kB # 内存中的PageCache大小,不包括SwapCached
SwapCached:            0 kB # 换出后又换入到的内存,但是内容仍然在swapfile中,这类内存如果要换出不需要重复写回swapfile,可以减少IO。
Active:          9252804 kB # 使用比较活跃的内存,非必要情况下不会回收,Active(anon) + Active(file) 
Inactive:        3884896 kB # 使用不过活跃的内存,更适合被回收用于其他用途,Inactive(anon) + Inactive(file)
Active(anon):     598912 kB # 活跃的匿名页
Inactive(anon):      344 kB # 不活跃的匿名页
Active(file):    8653892 kB # 活跃的PageCache
Inactive(file):  3884552 kB # 不活跃的PageCache
Unevictable:           0 kB # 无法回收的内存
SwapTotal:             0 kB # 交换区的大小
SwapFree:              0 kB # 已经在从RAM中置换到交换区的内存
Dirty:              1116 kB # 等待写回磁盘的内存
Writeback:             0 kB # 正在写回磁盘的内存
AnonPages:        603804 kB # 映射到用户空间页表的匿名页
Mapped:           346480 kB # 映射到用户空间页表的文件
Shmem:               812 kB # shmem和tmpfs使用的内存
Slab:            2444456 kB # 内核内部的数据结构缓存
SReclaimable:    2410472 kB # Slab中可回收的部分
SUnreclaim:        33984 kB # Slab中不可回收的部分
KernelStack:        7712 kB # 内核栈使用的内存
PageTables:        10008 kB # 最底层页表使用的内存

内存的分类

  • 按照是否已分配分类:所有存放在伙伴系统的中的空闲列表中页帧都属于未被分配的内存,对应MemFree的部分。已分配的内存则会用于slab分配器、用户态进程、共享内存、PageCache等多种用途。
  • 按照活跃度分类:内核使用LRU来管理已分配的内存页,将所有内存分为ActiveInactive两类,内存有压力时优先从不活跃的链表中回收页面。
  • 按匿名性分类:如果一个页面存放的内容来自于文件,这个页面则是非匿名内存,反之亦然。这两类内存在回收上有较大的区别,首先对于匿名内存在开启了内存交换的情况下可以写入交换区后释放,而非匿名内存如果是脏页改则直接写回文件,无修改则直接释放。而在未开启内存交换的情况下,匿名内存无法被释放回收,而非匿名内存则可以将脏页刷盘后释放和回收。
  • 按共享性分类:如果一个页面被多个进程共享,则该页面属于共享内存,共享内存除了包括mmap映射的内存以外还包括tmpfs。

MemAvailable

可用内存总量MemAvailable是内核估算的一个值,这个值表示在不影响内核稳定运行的情况下(不触发内存回收)可以给用户态进程使用的内存总量。参考si_mem_available()函数,详细的计算公式如下:

MemAvailable = MemFree - totalreserve_pages + max(pagecache / 2, pagecache - wmark_low) + max(SReclaimable / 2, SReclaimable - wmark_low) + INDIRECTLY_RECLAIMABLE

其中:

  • totalreserve_pages:内核预留的内存
  • wmark_low:每个Zone的low内存水线之和
  • pagecacheInactive(file) + Active(file)
  • SRebclaimable:Slab中可回收的部分
  • INDIRECTLY_RECLAIMABLE/* Part of the kernel memory, which can be released under memory pressure.注释上看是内存有压力时可以释放的部分内核内存。

但是一般来说wmark_low都比较小,简化版公式如下:

MemAvailable = MemFree - totalreserve_pages + Inactive(file) + Active(file) + SReclaimable

标签:kB,meminfo,Inactive,内存,file,Active,内核
From: https://www.cnblogs.com/wodemia/p/18394800

相关文章

  • meminfo一些容易混淆的点
    MemTotal:1859964kBMemFree:226356kBMemAvailable:847856kBBuffers:23332kBCached:710996kBSwapCached:64kBActive:308020kBInactive:655400kBActive(anon):97916kBInactive(anon):222764kBActive(file):......
  • proc/meminfo详解
    [root@iZ2ze7ukvpkonzby0h3wbfZ~]#cat/proc/meminfoMemTotal:16265476kB//可用的总内存MemFree:212936kB//完全未用到的物理内存LowFree+HighFreeMemAvailable:1968228kB//MemAvailable≈MemFree+Buffers+CachedBuffers:......
  • procmeminfo 各字段详解
    procmeminfo各字段详解$cat/proc/meminfoMemTotal:877368kB:所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码大小)(HighTotal+LowTotal),系统从加电开始到引导完成,BIOS等要保留一些内存,内核要保留一些内存,最后剩下可供系统支配的内存就是MemTotal。这......
  • /proc/meminfo
    Linux:/proc/meminfo参数详细解释一、Linux内存总览图二、meminfo参数的详细介绍/proc/meminfo是了解Linux系统内存使用状况的主要接口,我们最常用的”free”、”vmstat”等命令就是通过它获取数据的,/proc/meminfo所包含的信息比”free”等命令要丰富得多,然而真正理解它并不容......
  • meminfo详解
    目录meminfo详解1、通过cat/proc/meminfo查看2、查看显示内存状态:free[option][-s<间隔秒数>]3、查看虚拟内存使用状态:vmstat[option]4、清理缓存meminfo详解Linux系统内存使用状况主要存储在/proc/meminfo中,”free”、”vmstat”等命令就是通过它获取数据的。1、通过......
  • Android libmeminfo
    android10增加了libmeminfo.so,用于内存信息的查询,主要通过解析/proc/meminfo文件源代码位于system/core/libmeminfo,代码非常简单没什么好说的//system/core/lib......