Linux 系统中的 cached 内存是理解系统性能优化的关键概念之一,它作为操作系统内核管理内存资源的重要机制,直接影响应用程序的运行效率、文件系统的访问速度以及整体系统的响应能力,深入理解 cached 内存的工作原理、作用机制及其与系统性能的关系,对于系统管理员、开发者及高级用户而言都具有重要意义。

cached 内存的定义与作用
在 Linux 内存管理中,cached 内存(通常指 Page Cache)主要指用于缓存文件数据的内存区域,当应用程序读取或写入文件时,内核不会立即直接与磁盘进行交互,而是先将文件数据加载到内存的缓存区域,这样,当后续需要访问相同文件数据时,系统可以直接从高速内存中读取,无需等待慢速的磁盘 I/O,从而显著提升数据访问速度。
cached 内存的作用主要体现在以下几个方面:
- 提升文件读取速度:对于频繁访问的文件,其数据会被长期保留在缓存中,再次访问时几乎可以瞬时完成。
- 优化写入性能:当应用程序写入数据时,系统通常先将数据写入缓存,然后由内核在合适的时机(如内存紧张或定期)批量写入磁盘,减少磁盘写入次数。
- 平衡内存使用:cached 内存属于“可回收”内存,当系统需要为应用程序分配更多内存时,内核可以快速释放缓存内存,优先保障进程的内存需求。
cached 内存的工作机制
Linux 内核通过页面缓存(Page Cache)机制管理 cached 内存,其核心工作流程如下:
读取文件数据
当进程读取文件时,内核首先检查请求的数据是否已存在于 Page Cache 中:
- 命中(Cache Hit):如果数据在缓存中,直接从内存返回,避免磁盘 I/O。
- 未命中(Cache Miss):如果数据不在缓存中,内核从磁盘读取数据到缓存,同时返回给进程,并将后续可能访问的相邻数据也预读(Read-Ahead)到缓存中。
写入文件数据
进程写入文件时,数据首先被写入 Page Cache,并标记为“脏”(Dirty),内核通过以下两种方式将脏数据写回磁盘:
- 写回(Write-Back):延迟写入,内核根据脏页的比例、内存压力等因素,定期将脏页写回磁盘。
- 同步写入(Sync):应用程序调用
fsync()或fdatasync()时,强制将脏页写入磁盘。
缓存回收机制
当系统内存不足时,内核会启动回收机制,释放 cached 内存:

- 直接回收(Direct Reclaim):在进程申请内存时,若直接回收失败,可能导致进程短暂阻塞。
- 后台回收(Kswapd):内核线程
kswapd在后台定期扫描并回收不常用的缓存页,避免直接回收对性能的影响。
cached 内存与 free 内存的关系
许多用户对 Linux 中的 free 命令输出存在误解,尤其是 -/+ buffers/cache 行的含义,Linux 内存管理中,cached 内存和 buffers(用于块设备 I/O 的缓存)均属于“可回收”内存,并非真正“空闲”但不可用的内存。
以下是一个典型的 free -h 输出示例:
total used free shared buff/cache available
Mem: 7.7G 2.1G 1.2G 123M 4.4G 5.0G
Swap: 2.0G 0B 2.0G
- buff/cache:即 buffers 和 cached 内存的总和,表示可被回收的内存。
- available:系统实际可用的内存,包括 free 内存和可回收的 cached/buffers 内存(扣除少量不可回收部分)。
cached 内存并非“浪费”,而是系统利用空闲内存提升性能的体现,当应用程序需要内存时,内核会优先回收 cached 内存,确保进程的内存需求。
cached 内存的管理与优化
合理管理 cached 内存对系统性能至关重要,以下是一些关键优化策略:
监控 cached 内存使用情况
使用以下工具可以实时查看 cached 内存状态:
- free:快速查看内存总体使用情况。
- vmstat:监控内存回收、I/O 等指标。
- sar:记录历史内存使用趋势。
- /proc/meminfo:详细的内存统计信息,如
Cached、Dirty、Writeback等字段。
调整内核参数
通过修改 /etc/sysctl.conf 文件,可以优化 cached 内存的行为:

vm.swappiness:控制 swap 使用倾向(0-100),默认 60,降低该值可减少 swap 使用,优先回收 cached 内存。vm.dirty_ratio和vm.dirty_background_ratio:控制脏页写回的阈值,避免脏页过多导致 I/O 堵塞。
文件系统优化
选择合适的文件系统(如 ext4、XFS、btrfs)并调整其参数,可以提升 cached 内存效率,XFS 的 largeio 和 swalloc 选项有助于优化大文件的缓存管理。
应用层优化
- 合理使用 I/O 缓冲:应用程序可通过
mmap()或直接读写文件,减少内核与用户空间的内存拷贝。 - 避免频繁小文件 I/O:小文件会导致缓存碎片化,建议合并小文件或使用 I/O 调度优化。
cached 内存与性能调优实例
以 Web 服务器为例,当大量用户请求静态文件时,cached 内存可以显著减少磁盘 I/O,提升响应速度,若系统内存充足,可适当增大 vm.vfs_cache_pressure 参数(默认 100),优先回收 inode 和 dentry 缓存,保留 Page Cache,反之,若内存紧张,则需降低 swappiness,避免频繁 swap。
以下是不同场景下的优化建议:
| 场景 | 优化策略 |
|---|---|
| 高并发读密集型应用 | 增大 Page Cache,调整 readahead 参数,启用 noatime 文件系统选项 |
| 写密集型数据库 | 调整 dirty_ratio 和 dirty_background_ratio,使用 SSD 减少写延迟 |
| 内存受限环境 | 降低 swappiness,启用 zram 压缩 swap,减少物理内存占用 |
Linux cached 内存是内核提升系统性能的核心机制之一,通过高效缓存文件数据,减少磁盘 I/O,显著改善应用程序的响应速度,理解其工作原理、与系统内存的关系以及优化方法,有助于更好地管理和调优 Linux 系统,在实际应用中,需根据业务场景和硬件配置,合理调整 cached 内存的使用策略,在性能与资源利用之间找到平衡点,从而充分发挥 Linux 系统的潜力。














