首先明确故障类型,可通过以下方式快速定位:
/var/log目录下的messages、secure、httpd、mysql等日志文件,寻找与缓存相关的错误或警告信息(如缓存溢出、超时、配置错误等)。systemctl status <服务名>(如httpd、mysqld、redis)确认相关服务是否正常运行;用ps、top查看是否有异常进程占用大量缓存资源。ping测试连通性,traceroute追踪路由,netstat检查端口状态,确保网络链路正常。通过以下命令查看系统缓存使用情况,判断是否存在异常:
free -h(显示总内存、已用内存、缓存buffers/cache及可用内存);vmstat 1(实时查看虚拟内存统计,包括缓存cache、缓冲区buff的变化)。cat /proc/meminfo(查看Buffers、Cached、Slab等详细缓存指标,Slab包含内核对象缓存)。df -h(检查磁盘空间是否充足,磁盘满会导致缓存无法写入);du -sh /path/to/folder(定位占用空间大的目录)。根据缓存类型选择合适的清理方法(生产环境需谨慎,避免频繁清理影响性能):
sync(强制将缓存数据写入磁盘);echo 3 > /proc/sys/vm/drop_caches(清除页面缓存、目录项和inode缓存)。sudo yum clean all(清除YUM缓存,包括旧版本软件包和元数据)。sudo nginx -s reload(重新加载Nginx配置,清除配置缓存);sudo systemctl reload httpd(重载Apache配置)。sudo systemctl reload mysqld(重载MySQL配置,清除查询缓存)。redis-cli flushall(清除所有Redis缓存);redis-cli info(查看Redis缓存状态)。echo "flush_all" | nc localhost 11211(清除Memcached缓存)。若缓存占用过高或性能下降,可调整内核参数优化缓存行为:
vm.dirty_background_ratio(后台写入脏页的阈值,默认10%,可降低至5%);vm.dirty_ratio(强制写入脏页的阈值,默认20%,可降低至10%)。修改方法:sysctl -w vm.dirty_background_ratio=5(临时生效),编辑/etc/sysctl.conf(永久生效)。vm.vfs_cache_pressure(控制内核回收用于目录和inode缓存的内存的倾向,默认100,增大至200可加快回收)。使用工具分析缓存命中率、瓶颈及异常:
perf stat -e L1-dcache-load-misses,L1-dcache-load-hits,L1-icache-load-misses,L1-icache-load-hits(查看L1缓存命中率,命中率低说明缓存效率差)。htop(监控CPU、内存及缓存使用情况);atop(查看历史资源使用记录)。sysctl -a | grep cache(查看所有缓存相关内核参数,如vm.dirty_writeback_centisecs控制脏页回写间隔)。valgrind工具分析应用程序内存使用情况。sudo dd if=/dev/zero of=/swapfile bs=1G count=8(创建8G交换文件);sudo mkswap /swapfile(格式化);sudo swapon /swapfile(启用);编辑/etc/fstab(永久生效)。lsof | grep deleted显示大量已删除但仍被进程占用的文件,重启对应进程释放缓存。