Translated message

A translation of this page exists in English.

解释 Red Hat Enterprise Linux 的 /proc/meminfo 和 free 输出

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux(所有版本)

Issue

  • 我需要 /proc/meminfo 输出的解释。
  • 我想将 free -k 的输出与 cat /proc/meminfo 的输出进行比较。

Resolution

比较输出

  • 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 及更高版本,提供了一个额外的字段,它会被使用,而不是对 -/+ buffer/cache 行的计算:
MemAvailable:     543584 kB

free -k 的输出与 /proc/meminfo匹配

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

free 输出 相应的 /proc/meminfo 字段
Mem: total MemTotal
Mem: used MemTotal - MemFree
Mem: free MemFree
Mem: shared(现在可以忽略)。它没有意义。) N/A
Mem: buffers Buffers
Mem: cached Cached
-/+ buffer/cache: used MemTotal -(MemFree + Buffers + Cached)
-/+ buffer/cache: free MemFree + Buffers + Cached
Swap: total SwapTotal
Swap: used SwapTotal - SwapFree
Swap: free SwapFree

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

free 输出 相应的 /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

Root Cause

  • 分析内存消耗

Diagnostic Steps

大部分资料是从内核文档中获取的(Documentation/filesystems/proc.txtDocumentation/vm/hugetlbpage.txt)

高级别统计

RHEL 5、6、7、8 和 9。
  • MemTotal:可用内存总量
  • MemFree:系统 没有 使用的物理内存量
  • Buffers:缓存中的内存,原始磁盘块的相对临时存储。这不应该很大。
  • Cached:页缓存中的内存(磁盘缓存和共享内存)
  • SwapCached:主内存中存在的内存,但也在交换文件中。(如果需要内存,则不需要将该区域再次交换出去,因为它已在交换文件中。这会节省 I/O,并在机器缺少内存时提高性能。)
仅限 RHEL 7、8 和 9
  • MemAvailable:估算需要多少内存来启动新的应用程序,而不需要交换。
    • 有关 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 页也是无法访问的。

内存统计信息

RHEL 5、6、7、8 和 9。
  • SwapTotal:可用的总 swap 空间
  • SwapFree:剩余的 swap 空间
  • Dirty:等待写到磁盘的内存
  • Writeback:主动写回磁盘的内存
  • AnonPages:映射到用户空间页表的非文件支持的页
  • Mapped:已映射的文件,如库
  • Slab:内核中的数据结构缓存
  • PageTables :专用于最低级别页表的内存量。如果很多进程附加到同一共享内存段上,可以将其增加到一个高值。
  • NFS_Unstable:发送到服务器的 NFS 页,但还没有提交到存储
  • Bounce:用于块设备 bounce 缓冲 的内存
  • CommitLimit:根据过度提交比率(vm.overcommit_ratio),这是当前系统上可被分配的内存量。只有在启用了严格的过度提交核算时(vm.overcommit_memory中的模式 2)才会遵循此限制。
  • Committed_AS:系统上目前分配的内存量。已提交的内存是所有由进程分配的内存的总和,即使它们还没有被"使用"。
  • VmallocTotal: vmalloc 内存区域的总大小
  • VmallocUsed: 使用的 vmalloc 区域量
  • VmallocChunk: vmalloc 区域的最大连续块,其是免费的
  • HugePages_Total :内核分配的巨页数(使用 vm.nr_hugepages定义)
  • HugePages_Free:进程没有分配的巨页数
  • HugePages_Rsvd:已承诺从池中分配的巨页数,但还没有分配。
  • Hugepagesize :巨页 的大小(在基于 Intel 的系统上通常为 2MB)
Red Hat Enterprise Linux 7, 8, 9
  • Percpu:专用于每 cpu 对象的内存量。为了扩展性和内存访问速度优化,许多特定于内核的对象被已这种方式中止,以便系统上的每个 CPU 都有一份该对象的副本(每 cpu)。这些对象可以在引导时静态分配或在系统运行期间动态分配;例如,cgroups 通常创建动态的每 cpu 对象分配。
RHEL 9
  • CmaTotal :为当前内核保留的连续内存区域的总数。
  • CmaFree:当前内核可自由使用的连续内存区域。

备注:RHEL 9 的 /proc/meminfo 中添加的作为 CmaTotalCmaFree 的新参数,

RHEL 6, 7, 8 和 9 。
  • Shmem:已使用的共享内存总量(在多个进程之间共享,因此包括 RAM 磁盘、SYS-V-IPC 和类似 SHMEM 的 BSD)
  • 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 的效率。因此,如果 RAM 数没有改变,则 DirectMap* 的总和应该是恒定的,并且大多数内存对 DirectMap1G 和/或 DirectMap2M 进行计算。这与 巨页 无关。
DirectMap1G的备注 :这个值仅在 /proc/meminfo 中提供,前提是相应的 CPU 硬件支持它。您可以通过检查 /proc/cpuinfo 中的标记 'pdpe1gb' 来验证。

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Comments