在Linux系统中,cache(缓存)是提升系统性能的关键机制,主要用于缓存频繁访问的数据,减少磁盘I/O和内存访问延迟,查看cache的使用情况有助于监控系统内存状态、诊断性能问题,例如判断内存是否被过度占用、是否存在内存泄漏等,Linux中查看cache的方法多样,可通过命令行工具、系统文件等途径实现,以下详细介绍几种常用方式。

通过free命令查看内存及cache概览
free是最基础的内存查看命令,以简洁的方式展示系统内存使用情况,包括物理内存(RAM)、交换空间(Swap)以及buffer和cache的占用,默认单位为KB,可通过-h参数以人类可读格式(如KB、MB、GB)显示。
基本用法
free -h
输出示例
total used free shared buff/cache available
Mem: 7.7G 2.1G 4.2G 123M 1.4G 5.1G
Swap: 2.0G 0B 2.0G
关键字段解析
- total:物理内存总量。
- used:已使用内存(包括应用、buffer、cache)。
- free:完全空闲内存。
- buff/cache:缓存区(Buffers)和页缓存(Cache)的总和,是Linux中cache的核心部分:
- Buffers:用于存储块设备(如磁盘)的元数据缓存,例如文件系统超级块、目录索引等。
- Cache:页缓存,主要用于缓存文件数据(如文件内容、程序代码),减少磁盘读取。
- available:可用内存(包括free + 可回收的cache/buffer),比
free更准确地反映系统可分配内存,是判断内存是否紧张的重要指标。
free命令适合快速了解内存整体使用情况,但无法深入分析cache的内部构成或动态变化。
通过/proc/meminfo查看详细内存信息
/proc/meminfo是Linux内核提供的内存信息虚拟文件,内容比free更详细,包含各类内存使用的精确数据,适合深度分析。
查看方式
cat /proc/meminfo
关键cache相关字段
| 字段名 | 含义说明 |
|---|---|
| MemTotal | 物理内存总量(与free的total一致) |
| MemFree | 完全空闲内存(与free的free一致) |
| Buffers | 块设备缓存(Buffers),如磁盘元数据缓存 |
| Cached | 页缓存(Cache),主要用于文件数据缓存 |
| Slab | 内核对象缓存(如inode、dentry等),属于内核专用内存,不直接用于用户空间 |
| SReclaimable | 可回收的Slab内存,可被系统回收释放 |
| Shmem | 共享内存(如System V共享内存、tmpfs文件系统占用) |
示例输出片段
MemTotal: 8058768 kB
MemFree: 4325420 kB
Buffers: 143456 kB
Cached: 1456784 kB
Slab: 234567 kB
SReclaimable: 123456 kB
Shmem: 34567 kB
通过/proc/meminfo可以精确获取Buffers和Cached的值,甚至可回收内存的规模,适合排查内存泄漏或分析内核内存占用。
通过vmstat监控内存动态变化
vmstat(Virtual Memory Statistics)是系统监控工具,可实时显示内存、进程、I/O等状态,其中包含cache相关的动态数据。
基本用法(每秒刷新一次,共3次)
vmstat 1 3
输出示例(关键列)
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 4325420 143456 1456784 0 0 10 50 100 200 5 2 90 3 0
关键字段解析
- buff:当前Buffers大小(与
free、/proc/meminfo一致)。 - cache:当前Cache大小(与
free、/proc/meminfo一致)。 - si/so:交换分区写入/读出速率,若频繁非零,可能内存不足。
vmstat适合监控内存使用趋势,例如观察cache是否随应用负载变化而动态增减,判断内存回收是否及时。

通过top/htop实时查看进程级内存占用
top和htop是交互式进程监控工具,可实时查看各进程的内存使用情况,包括进程占用的cache。
top基本用法
top
在top界面中,按Shift + M可按内存使用率排序,关键列包括:
- RES:进程当前使用的物理内存(包括私有内存+共享内存)。
- SHR:进程使用的共享内存(可能包括cache)。
- %MEM:进程内存占用率。
htop优势
htop是top的增强版,界面更友好,支持彩色显示、鼠标操作,且默认显示“SReclaimable”(可回收Slab)和“Dirty”(脏页,需写回磁盘的cache),便于直观分析进程与cache的关系。
htop输出示例(内存相关列)
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
1234 root 20 0 1234M 567M 89M S 5.2 7.1 10:30 nginx
5678 user1 10 0 890M 234M 45M R 2.1 2.9 5:12 python
通过top/htop可定位占用内存(含cache)的高耗进程,例如排查异常进程是否过度占用cache导致内存紧张。
通过sar分析内存历史使用趋势
sar(System Activity Reporter)是系统历史数据收集工具,需安装sysstat包,可查看cache的历史使用情况,适合长期性能分析。
安装sysstat(Ubuntu/Debian)
sudo apt install sysstat
查看内存历史数据(按天查看)
sar -r -s 00:00:00 -e 23:59:59
输出示例
00:00:01 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
00:01:01 4325420 3733348 46.32 143456 1456784 543210 6.74
关键列说明:

- kbbuffers:Buffers大小(KB)。
- kbcached:Cache大小(KB)。
sar适合分析cache随时间的变化规律,例如观察夜间低负载时cache是否自动回收,或高峰期cache是否达到峰值。
工具对比与使用场景
| 工具 | 用途 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
free |
内存概览 | 简单快速,人类可读格式 | 信息较粗,无动态数据 | 快速查看内存及cache总量 |
/proc/meminfo |
详细内存信息 | 数据最全面,内核原始数据 | 输出冗长,需自行解析字段 | 深度分析内存构成 |
vmstat |
内存动态监控 | 实时显示趋势,包含I/O等关联数据 | 无进程级信息 | 监控内存回收效率及变化趋势 |
top/htop |
进程级内存监控 | 实时交互,可定位高耗进程 | top界面较原始,htop需安装 |
排查异常进程内存占用 |
sar |
内存历史数据分析 | 支持历史数据,适合长期趋势分析 | 需安装配置,实时性差 | 性能分析与容量规划 |
相关问答FAQs
Q1:Buffers和Cache有什么区别?为什么Linux内存占用高却系统不卡?
A:Buffers主要用于块设备(如磁盘)的元数据缓存,例如文件系统的超级块、目录索引等,属于“块缓存”;Cache是页缓存,用于缓存文件数据(如文件内容、程序代码),属于“文件缓存”,Linux会尽可能将空闲内存用作Cache,以提升后续访问速度(若内存不足,内核会自动回收Cache),即使used内存显示较高(主要是Cache),只要available内存充足,系统仍可正常分配内存给应用,不会卡顿。
Q2:如何释放Linux中的Cache?什么情况下需要手动释放?
A:Linux内核会自动回收Cache,但手动释放可通过echo命令同步文件系统缓存(需root权限):
- 释放页缓存(Cache):
echo 1 > /proc/sys/vm/drop_caches - 释放目录项和inode缓存:
echo 2 > /proc/sys/vm/drop_caches - 全部释放(包括Buffers和Cache):
echo 3 > /proc/sys/vm/drop_caches
注意:手动释放cache后,后续访问磁盘数据会变慢(因需重新加载cache),通常仅在内存紧张(如OOM频繁发生)且确认无内存泄漏时手动释放,多数情况下无需操作,内核回收机制已足够高效。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/19073.html