解释 Red Hat Enterprise Linux 的 /proc/meminfo

环境

  • 红帽企业 Linux(所有版本)

问题

  • 我需要对/proc/meminfo输出的解释。
  • 我想比较free -kcat /proc/meminfo的输出

解决方案

比较输出

  • free -k输出(RHEL 5 和 RHEL 6):

             total       used       free     shared    buffers     cached

Mem:       7778104    2971960    4806144          0     211756    1071092

-/+ buffers/cache:    1689112    6088992

Swap:      4194296          0    4194296

  • free -k输出(RHEL 7 及更高版本):

              total        used        free      shared  buff/cache   available

Mem:        1012952      252740      158732       11108      601480      543584

Swap:       1048572        5380     1043192

  • /proc/meminfo将它们与以下输出相匹配的相关字段free -k

MemTotal:        7778104 kB

MemFree:         4806144 kB

Buffers:          211756 kB

Cached:          1071092 kB

SwapTotal:       4194296 kB

SwapFree:        4194296 kB

  • 对于 RHEL 7 及更高版本,有一个可用的附加字段,用于代替-/+ buffers/cacheline 的计算:

MemAvailable:     543584 kB

free -kto的匹配输出/proc/meminfo

下表显示了如何使free输出与/proc/meminfoRed Hat Enterprise Linux 5、6、7、8 和 9 中的字段匹配。

free output

对应/proc/meminfo领域

Mem: total

MemTotal

Mem: used

MemTotal - MemFree

Mem: free

MemFree

Mem: shared(现在可以忽略。没有任何意义。)

不适用

Mem: buffers

Buffers

Mem: cached

Cached

-/+ buffers/cache: used

MemTotal - (MemFree + Buffers + Cached)

-/+ buffers/cache: free

MemFree + Buffers + Cached

Swap: total

SwapTotal

Swap: used

SwapTotal - SwapFree

Swap: free

SwapFree

下表显示了如何使free输出与/proc/meminfoRed Hat Enterprise Linux 7.1 或更高版本 (procps-ng 3.3.10) 中的字段匹配。

free output

对应/proc/meminfo领域

Mem: total

MemTotal

Mem: used

MemTotal - MemFree - Buffers - Cached - Slab

Mem: free

MemFree

Mem: shared

Shmem

Mem: buff/cache

Buffers + Cached + Slab

Mem:available

MemAvailable

Swap: total

SwapTotal

Swap: used

SwapTotal - SwapFree

Swap: free

SwapFree

根本

  • 分析内存消耗

诊断步骤

大多数内容取自内核文档(Documentation/filesystems/proc.txtDocumentation/vm/hugetlbpage.txt

高级统计

RHEL 5、6、7、8 和 9。

  • MemTotal:总可用内存
  • MemFree:系统未使用的物理内存量
  • Buffers:缓冲区缓存中的内存,因此相对临时存储原始磁盘块。这不应该变得非常大。
  • Cached:pagecache 中的内存(Diskcache 和 Shared Memory)
  • SwapCached:内存存在于主内存中,但也存在于交换文件中。(如果需要内存,则该区域不需要再次换出,因为它已经在交换文件中。如果机器内存不足,这可以节省 I/O 并提高性能。)

仅限 RHEL 7、8 和 9

  • MemAvailable:估计有多少内存可用于启动新应用程序,无需交换。

详细级别统计

RHEL 5、6、7、8 和 9。

  • Active:最近使用的内存,通常不会换出或回收
  • Inactive:近期未使用且可换出或回收的内存

RHEL 6、7、8 和 9。

  • Active(anon):最近使用过且通常不会换出的匿名内存
  • Inactive(anon):最近没有使用的匿名内存,可以换出
  • Active(file):最近使用的页面缓存内存,通常在需要时才回收
  • Inactive(file):可以回收而不会对性能产生巨大影响的页面缓存内存
  • Unevictable:由于各种原因无法换出不可撤销的页面
  • Mlocked:mlock()使用系统调用锁定到内存的页面。Mlocked 页面也是 Unevictable。

内存统计

RHEL 5、6、7、8 和 9。

  • SwapTotal:可用的总交换空间
  • SwapFree:剩余可用交换空间
  • Dirty:等待写回磁盘的内存
  • Writeback:正在主动写回磁盘的内存
  • AnonPages:映射到用户空间页表的非文件支持页
  • Mapped:已映射的文件,例如库
  • Slab:内核数据结构缓存
  • PageTables:专用于最低级别页表的内存量。如果很多进程连接到同一个共享内存段,这可能会增加到一个很高的值。
  • NFS_Unstable:NFS 页面发送到服务器,但尚未提交到存储
  • Bounce:用于块设备的内存bounce buffers
  • CommitLimit:根据过量使用率 ( vm.overcommit_ratio),这是系统上当前可分配的内存总量。仅当启用了严格的过量使用记帐(模式 2 in )时才遵守此限制vm.overcommit_memory
  • Committed_AS:当前在系统上分配的内存量。提交的内存是进程分配的所有内存的总和,即使它还没有被它们“使用”。
  • VmallocTotal:vmalloc 内存区域的总大小
  • VmallocUsed:使用的vmalloc区域的数量
  • VmallocChunk:vmalloc 区域的最大连续块,它是空闲的
  • HugePages_Total:内核分配的大页数(用 定义vm.nr_hugepages
  • HugePages_Free:进程未分配的大页数
  • HugePages_Rsvd:已承诺从池中分配但尚未分配的大页数。
  • Hugepagesize:a 的大小hugepage(在基于 Intel 的系统上通常为 2MB)

红帽企业 Linux 7、8、9

  • Percpu:专用于每个 cpu 对象的内存量。为了可扩展性和内存访问速度优化,许多特定于内核的对象被分解,以便为系统上的每个 CPU(每个 CPU)拥有该对象的副本。这些对象可以在启动时静态分配,也可以在系统运行时动态分配;例如,cgroups 经常创建动态的 per-cpu 对象分配。

RHEL 9

  • CmaTotal:为当前内核保留的连续内存区域总量。
  • CmaFree:当前内核可以自由使用的连续内存区域。

注意:RHEL9在 /proc/meminfo 中添加的新参数 CmaTotalCmaFree

RHEL 6、7、8 和 9。

  • Shmem:使用的共享内存总量(在多个进程之间共享,因此包括 RAM 磁盘、SYS-V-IPC 和 BSD,如 SHMEM)
  • SReclaimable:Slab 中可能被回收的部分(例如缓存)
  • SUnreclaim:Slab内存压力下无法回收的部分
  • KernelStack:内核堆栈使用的内存。这是不可回收的。
  • WritebackTmp:FUSE 用于临时回写缓冲区的内存
  • HardwareCorrupted:内核识别为损坏/不工作的 RAM 量
  • AnonHugePages:映射到用户空间页表的非文件支持的大页
  • HugePages_Surp:池中大于vm.nr_hugepages. 剩余大页面的最大数量由 控制vm.nr_overcommit_hugepages
  • DirectMap4k:映射到 4k 大小页面的内核空间的内存量。
  • DirectMap2M:映射到具有 2MB 大小页面的内核空间的内存量。
  • DirectMap1G.映射到具有 1GB 大小页面的内核空间的内存量。

注意DirectMap*:所有 RAM 都直接映射到 64 位架构中的内核空间。如果可能,内核会使用更大尺寸的页面来提高 TLB 的有效性。DirectMap*因此,如果 RAM 的数量没有改变,并且大多数内存都计算在DirectMap1G和/或上,那么 的总和应该是恒定的DirectMap2M。这与hugepages.

注意DirectMap1G:此值仅在/proc/meminfo相应的 CPU 硬件支持的情况下可用。您可以通过检查标志“pdpe1gb”来验证/proc/cpuinfo。DirectMap1G 只会在 CPU 硬件启用了“pdpe1gb”标志的系统上可见。

猜你喜欢

转载自blog.csdn.net/taoxicun/article/details/126749001