Linux系统监控数据 - /proc/meminfo
/proc/meminfo 是 Linux 系统中一个虚拟文件,记录了系统的内存使用情况。通过分析该文件,可以了解物理内存、交换空间(Swap)、缓存(Cache)和缓冲区(Buffer)的分配与使用情况。以下将会讲解常见字段的含义和功能。
1. 内存数据汇总
1.1. 物理内存相关
MemTotal
系统可用的总物理内存(不包括内核保留的内存,如内核代码占用的空间)。
例如:MemTotal: 16302048 kB
表示约 16GB 物理内存。
MemFree
当前未被使用的物理内存(但可能包含缓存和缓冲区的可回收部分)。
MemFree
值低不一定表示内存不足,需结合其他字段(如 Cached
、Buffers
)分析。
MemAvailable
(内核 3.14+ 引入)
系统实际可用内存的估算值,包含未被使用的内存 + 可回收的缓存/缓冲区(供应用程序直接使用)。
这是判断内存是否充足的关键指标。
Active
最近被访问过的活跃内存(不可被回收)。
Inactive
较长时间未被访问的内存(可被回收用于其他用途)。
1.2. 缓存与缓冲区
Buffers
临时存储块设备(如磁盘)的原始数据(例如未写入磁盘的文件元数据)。
Cached
操作系统缓存文件内容的内存(如已读取的文件内容,可加速后续访问)。
注意:Cached
是 Buffers
的超集,包含文件系统缓存和共享内存(Shmem
)。
SReclaimable
内核 Slab 分配器中可回收的内存(如 dentry、inode 缓存)。
SUnreclaim
内核 Slab 分配器中不可回收的内存(如网络协议栈占用的内存)。
1.3. 交换空间(Swap)相关
SwapTotal
系统交换空间总量。
SwapFree
当前未被使用的交换空间。
SwapCached
曾经被交换出去,但后来又被换入且仍保留在交换区的数据(加速后续交换)。
1.3.1. 4. 其他重要字段
Shmem
通过 tmpfs
或共享内存(如 /dev/shm
)占用的内存。
Dirty
等待写入磁盘的脏数据大小。
Writeback
正在写入磁盘的数据大小。
Mapped
被映射到进程地址空间的文件占用的内存(如共享库)。
AnonPages
匿名内存页(如进程堆、栈等非文件相关的内存)。
HugePages_*
大页(HugePages)相关的统计(需手动配置)。
2. 内存使用分析示例
2.1. 总物理内存
1 2 3
| MemTotal: 8102344 kB MemFree: 5377428 kB MemAvailable: 6232012 kB
|
2.2. 缓存与缓冲区
1 2 3
| Buffers: 5320 kB Cached: 984452 kB SReclaimable: 170944 kB
|
2.3. 交换空间
1 2 3
| SwapTotal: 2097152 SwapFree: 2097152 SwapCached: 0
|
2.4. 完整示例数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| cat /proc/meminfo MemTotal: 8102344 kB MemFree: 5377428 kB MemAvailable: 6232012 kB Buffers: 5320 kB Cached: 984452 kB SwapCached: 0 kB Active: 187864 kB Inactive: 2039076 kB Active(anon): 2316 kB Inactive(anon): 1240504 kB Active(file): 185548 kB Inactive(file): 798572 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 2097152 kB SwapFree: 2097152 kB Dirty: 336 kB Writeback: 0 kB AnonPages: 1187204 kB Mapped: 333124 kB Shmem: 5652 kB KReclaimable: 170944 kB Slab: 233336 kB SReclaimable: 170944 kB SUnreclaim: 62392 kB KernelStack: 5696 kB PageTables: 18232 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 6148324 kB Committed_AS: 2393992 kB VmallocTotal: 34359738367 kB VmallocUsed: 28940 kB VmallocChunk: 0 kB Percpu: 4224 kB AnonHugePages: 296960 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB FileHugePages: 0 kB FilePmdMapped: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 0 kB DirectMap4k: 158720 kB DirectMap2M: 6096896 kB DirectMap1G: 11534336 kB
|
3. 常见问题排查
3.1. 内存不足
MemAvailable
接近 0 或 SwapFree
持续减少:系统可能频繁使用交换空间,导致性能下降。
3.2. 缓存占用高
Cached
高但 MemAvailable
充足:正常现象,缓存会按需释放。
3.3. 内存泄漏
Active
或 AnonPages
持续增长且不释放:可能存在应用程序或内核泄漏。
4. 工具辅助分析
free -h
快速查看内存和交换空间使用情况。
top
/ htop
实时监控进程内存占用。
slabtop
查看 Slab 内存分配详情。
vmstat
分析内存、交换、I/O 等系统状态。
5. 总结
MemAvailable
是判断内存是否充足的核心指标。
- 高
Cached
或 Buffers
通常无害,系统会自动回收。
- 监控
Swap
使用率,避免物理内存耗尽后性能骤降。
通过 /proc/meminfo
可以深入理解系统的内存行为,结合工具进一步定位性能问题。