centos缓存更新机制解析
小樊
31
2025-12-23 06:10:46
CentOS 缓存更新机制解析
一 软件包管理器缓存 YUM/DNF
- 缓存内容与位置:YUM 将仓库的元数据(包名、版本、依赖等)与实际下载的 RPM 包缓存在本地,默认目录为 /var/cache/yum。元数据由仓库通过 createrepo 生成,客户端在解析与安装时优先使用本地缓存以提升速度与稳定性。核心配置位于 /etc/yum.conf 与 /etc/yum.repos.d/*.repo。关键参数包括:
- metadata_expire:控制元数据缓存的过期时间(秒),过期后再次操作会触发刷新。
- cachedir:缓存目录位置。
- gpgcheck:是否进行 GPG 校验。
- 刷新与清理常用命令:
- 刷新元数据:
yum makecache(从已配置的仓库重新下载元数据并重建本地缓存)。
- 清理命令:
yum clean all(清理全部缓存)、yum clean packages(仅清理 RPM 包)、yum clean metadata(仅清理元数据)、yum clean expire-cache(清理已过期缓存)。
- 更换或新增仓库后,通常执行
yum clean all && yum makecache 以避免新旧元数据冲突。
- 自动更新:安装并启用 yum-cron,编辑 /etc/yum/yum-cron.conf 设置如
update_cmd = security,updates、update_interval = 1(按天检查更新)。
二 文件系统与磁盘缓存
- 缓存类型与作用:Linux 通过 Page Cache、Buffer Cache、inode/dentry cache 等加速文件访问。写操作先进入脏页,随后由内核回写线程异步或同步写入磁盘。
- 刷新与回收:
- 同步数据到磁盘:
sync(同步已修改的页与元数据,但不回收缓存);对单个文件可调用 fsync()。
- 回收已同步缓存:
echo 1 > /proc/sys/vm/drop_caches(清理 page cache)、echo 2(清理 dentries/inodes)、echo 3(清理全部三类)。注意:未同步的脏页不会被 drop_caches 清除,通常应先 sync。
- 写回策略可调参数(/proc/sys/vm/):
- vm.dirty_background_ratio:当脏页占内存超过该比例时,启动后台回写。
- vm.dirty_ratio:当脏页占比达到该阈值时,开始同步回写,可能阻塞应用 I/O。
- 建议保持
dirty_background_ratio < dirty_ratio;大写入场景可适当降低两者以加快落盘、减少抖动。
三 DNS 解析缓存
- 系统侧缓存:默认情况下 CentOS 不内置 DNS 缓存;若安装并启用 nscd(Name Service Cache Daemon),会对解析结果进行缓存,常见TTL 为 3600 秒。变更 DNS 映射后,可在客户端执行
nscd -r(或 service nscd reload)刷新缓存。
- 应用侧缓存:如 JVM 的 InetAddress 也会做进程内 DNS 缓存(JDK 6/7 常见为30 秒),与系统 nscd 无关。
- 长连接影响:数据库连接池等长连接不会因 DNS 变更自动重建,常需在变更后重启应用以按新映射建立连接。
四 缓存更新最佳实践
- 软件包管理:
- 变更仓库或遇到依赖异常时,先
yum clean all 再 yum makecache;日常更新前可 yum check-update 查看可用更新。
- 需要无人值守时启用 yum-cron,并按需设置安全/常规更新策略与检查频率。
- 文件系统与磁盘:
- 正常业务无需手动清缓存;出现异常或基准测试前,先
sync,必要时再按需 drop_caches(避免误删脏页导致数据丢失风险)。
- 写入密集型或延迟敏感场景,结合负载调优 dirty_background_ratio/dirty_ratio,在性能与数据安全间取得平衡。
- DNS:
- 使用 nscd 时,变更 DNS 记录后统一执行
nscd -r 刷新;应用存在长连接时,规划变更窗口并重启应用以确保解析生效。