CentOS 缓存故障排查与处置
一 明确缓存类型与症状
| 缓存类型 | 典型症状 | 快速定位命令 |
|---|---|---|
| Page Cache / Buffer Cache | 内存占用高但业务无明显异常,偶发写入延迟 | free -h、vmstat 1、cat /proc/meminfo |
| 文件系统脏页 | 同步/关机慢、iowait 高 | vmstat 1、iostat -x 1、cat /proc/vmstat |
| DNS 解析缓存 | 域名解析偶发失败或返回旧记录 | dig example.com +short、nslookup example.com、systemd-resolve --statistics |
| YUM/DNF 元数据缓存 | yum/dnf makecache 失败、更新报错 |
yum clean all、dnf clean all、dnf makecache |
| 应用层缓存 | 页面/接口数据不一致、命中率下降 | redis-cli info、memcached-tool localhost:11211 stats |
二 系统级 Page Cache 与脏页排查
free -h、vmstat 1、cat /proc/meminfo | egrep 'MemAvailable|Dirty|Writeback'。若 available 充足而 buff/cache 高,多为正常现象;若 si/so 或 wa 升高,说明内存或 I/O 压力增大。iostat -x 1、df -h、du -sh /var/* | sort -hr | head,定位是否因日志/数据占满磁盘或 I/O 瓶颈导致“缓存回写慢”。cat /proc/vmstat | egrep 'nr_dirty|nr_writeback';必要时调整内核参数(示例值,需结合业务验证):
vm.dirty_background_ratio(默认约10):后台回写阈值(占可用内存百分比)vm.dirty_ratio(默认约20):前台阻塞回写阈值vm.vfs_cache_pressure(默认100):控制 inode/dentry 回收倾向,适当降低可保留更多目录项缓存sync 再写入 echo 3 > /proc/sys/vm/drop_caches(取值:1 页缓存,2 dentry/inode,3 全部)。注意:清理会增大磁盘读负载、影响短时性能。三 名称解析与软件源缓存排查
dig example.com +short、nslookup example.comsudo systemd-resolve --flush-caches(若使用 systemd-resolved);如使用 nscd,执行 sudo systemctl restart nscdFailed to synchronize cache for repo 'AppStream'):
sudo dnf clean all && sudo dnf makecache(或 yum clean all && yum makecache)sudo sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*sudo dnf makecachetimedatectl status、sudo timedatectl set-ntp true,时间漂移会导致仓库元数据校验失败。四 应用层缓存排查
redis-cli ping、redis-cli info(关注 keyspace_hits/misses、used_memory、evicted_keys)echo "stats" | nc localhost 11211 或 memcached-tool localhost:11211 stats(关注 get_hits、get_misses、evictions)sudo systemctl reload nginx、sudo systemctl reload httpd,并查看应用与反向代理日志(如 /var/log/ 下的服务日志)确认是否命中率下降或后端异常。五 日志与系统状态交叉验证
journalctl -xe、tail -f /var/log/messages /var/log/secure,配合 top/htop、ps aux --sort=-%mem 找出异常进程。ping -c 4 8.8.8.8、mtr -r example.com、ss -lntp | grep :80,排除因网络抖动/丢包导致的“缓存一致性”错觉。sync,再检查 dmesg -T | tail、/var/log/messages 中的 I/O 错误;必要时对关键目录执行 lsof | grep deleted 排查被删除但仍被占用的文件句柄。