在 Linux 中,Cache(缓存)并非像定时任务那样主动清理,而是由内核根据内存压力等条件自动管理。Linux 的缓存主要包含 Page Cache(页缓存)、Inode/Dentry Cache(索引节点/目录项缓存)以及 SLAB/SLUB 分配器中的可回收对象。系统在读写文件时,会尽量将数据留在内存中以提高性能,这导致 free 命令中 cached 数值看起来很高,但这是正常现象。

内核的内存管理子系统会监控 内存水位(watermark)。当空闲内存低于某个阈值时,内核会启动 回收机制(memory reclaim),优先回收 可回收的缓存页。对于 干净页(clean page),可以直接丢弃;对于 脏页(dirty page),则必须先通过 pdflush / writeback 机制 写回磁盘后再释放。回收行为是 按需自动触发 的,不需要用户干预。
除了直接内存压力触发回收,内核还有 周期性内核线程(如 kswapd)在内存压力接近水位时进行预回收。同时,脏页比例 受 /proc/sys/vm/dirty_ratio 和 /proc/sys/vm/dirty_expire_centisecs 等参数控制,达到阈值也会触发后台写回。因此,cache 会自动清理,但清理策略是 被动、自适应 的,而非固定时间点。
需要特别注意的是,手动清理 cache(例如通过 echo 3 > /proc/sys/vm/drop_caches)通常只用于调试或测试场景。正常情况下,内核保留大量 cache 是为了提高文件访问效率,自动清理不会导致内存溢出或系统变慢。如果应用需要大量内存,内核会先收缩 cache 以满足分配需求,因此无需担心 cache 占用导致内存不足。
总结:Linux 中的 cache 会由内核自动按需回收,并且回收是安全、透明的。系统设计上优先利用空闲内存作为缓存,但在内存紧张时自动释放,不会造成死锁或长期锁定内存。用户通常不需要也不应该频繁手动清理 cache,除非有明确的性能调优或测试需求。

查看详情

查看详情