温馨提示×

centos缓存为何失效

小樊
41
2026-10-08 14:31:43
栏目: 智能运维

在 CentOS(以及大多数 Linux 系统)里,常说的“缓存失效”一般指的是 page cache / buffer cache 被回收,或者 DNS 缓存、yum 缓存、应用层缓存失效。不同场景原因不同,下面按常见情况说明。


一、系统层面:Linux 文件缓存(Page Cache)为何“失效”

Linux 的缓存(page cache)本来就是按需使用、可被回收的,不是“永久有效”。

1. 内存不足,内核自动回收

这是最常见原因。

  • 当 free 内存不足时
  • 内核通过 kswapd 回收 page cache
  • 表现:之前读过的文件再次读变慢

查看:

free -h
cat /proc/meminfo | grep -E 'MemFree|Cached'

2. 手动清除了缓存

你或脚本执行过:

echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

这会立即“让缓存失效”。


3. 文件被修改或删除

  • 文件内容变化 → 旧缓存失效
  • 文件被删除 → inode 变化,缓存不可用

4. 使用 O_DIRECT 或缓存绕过

应用直接读写磁盘:

  • 数据库(MySQL、PG)
  • 虚拟机(KVM)
  • 某些备份工具

这些 不会走 page cache,看起来像“缓存没用”。


5. 内存参数限制

cat /proc/sys/vm/min_free_kbytes
cat /proc/sys/vm/vfs_cache_pressure
  • vfs_cache_pressure 越大,inode/dentry 缓存越容易被回收

二、DNS 缓存失效(CentOS 常见)

CentOS 默认 没有系统级 DNS 缓存(除非装了 nscd / systemd-resolved / dnsmasq)

常见原因

  1. 未安装 DNS 缓存服务
  2. nscd 被停止
    systemctl status nscd
    
  3. /etc/resolv.conf 被 NetworkManager 重写
  4. TTL 到期(DNS 本身特性)

三、yum / dnf 缓存失效

1. 执行了清理

yum clean all

2. 缓存时间到期

/etc/yum.conf
metadata_expire=90m

3. 仓库元数据更新

仓库 push 新 repodata 后旧缓存失效


四、应用层缓存失效(Nginx / Redis / 应用自身)

  • Redis 内存满 → LRU 淘汰
  • Nginx proxy_cache 超时
  • 应用重启(如 Java / PHP-FPM)

五、如何判断“到底是哪种缓存失效”

你可以补充以下信息,我可以更精确判断:

  1. 你说的“缓存”是?
    • 系统文件缓存?
    • DNS?
    • yum?
    • 某个应用?
  2. 表现是什么?
    • 变慢?
    • 报错?
    • 命中率下降?
  3. 是否执行过清理或重启?
  4. CentOS 版本(7 / 8 / Stream)

如果你愿意,可以直接把:

free -h
uptime
systemctl status nscd

的输出贴出来,我可以帮你具体分析。

0 踩