在开始排查前,需先定位故障范围(硬件/软件/网络/缓存本身),并通过基础命令确认系统状态:
uname -a查看内核版本,cat /etc/*release*确认CentOS发行版(如7/8/9),避免因版本兼容性问题导致缓存异常。dmidecode -t system获取硬件信息(如内存、CPU),排查硬件故障(如内存损坏可能导致缓存数据不一致)。ping(测试连通性)、traceroute(追踪路由)、netstat -tulnp(查看端口监听状态)检查网络连接。日志是排查缓存故障的关键依据,重点检查以下日志文件:
/var/log/messages(记录系统整体运行状态)、/var/log/syslog(系统事件日志),查找与缓存相关的错误(如“Out of memory”、“Cache corruption”)。/var/log/httpd/error_log(Apache)、/var/log/mysqld.log(MySQL)、/var/log/redis/redis.log(Redis)),获取缓存服务的具体报错(如“Failed to write cache”、“Connection refused”)。通过以下命令实时监控缓存使用情况,判断是否因缓存占用过高导致故障:
free -h查看“Buffers”(缓冲区,临时存储磁盘I/O数据)和“Cached”(缓存,存储频繁访问的文件数据)列,确认缓存占内存的比例(Linux通常会利用空闲内存作为缓存,若占用超过70%可能影响系统性能)。cat /proc/meminfo查看Buffers、Cached、Slab(内核对象缓存)等字段,深入了解缓存组成(如Slab占用过高可能因内核对象泄漏)。vmstat 1(间隔1秒刷新)查看cache(缓存)和buff(缓冲区)列,以及si(从磁盘交换进内存)、so(从内存交换到磁盘)列,判断是否存在内存不足导致的缓存频繁换页。top或htop查看进程的RES(常驻内存)和SHR(共享内存)列,定位占用缓存过多的进程(如某个应用缓存了过多数据)。若缓存占用过高导致系统缓慢或服务崩溃,可通过以下命令清理缓存(注意:生产环境需谨慎,清理后可能短暂降低系统性能):
sync(强制将缓存数据写入磁盘,避免数据丢失),然后echo 3 > /proc/sys/vm/drop_caches(清理三种缓存)。sudo yum clean all清除临时文件、旧版本软件包和元数据。sudo nginx -s reload;Redis:redis-cli flushall;Memcached:echo "flush_all" | nc localhost 11211)。若清理缓存后故障仍存在,需检查内核参数配置和应用缓存设置:
sysctl -a | grep cache查看与缓存相关的内核参数(如vm.dirty_background_ratio:脏页占内存的比例阈值,默认10%;vm.dirty_ratio:脏页占内存的最大比例,默认20%)。若脏页比例过高导致缓存无法及时写入磁盘,可调整为更严格的值(如vm.dirty_background_ratio=5、vm.dirty_ratio=15),并通过sysctl -p使配置生效。/etc/redis.conf)中的maxmemory(最大内存限制)、ttl(缓存过期时间)等参数,确保配置合理(如maxmemory过小可能导致缓存频繁淘汰)。若上述步骤无法解决问题,可使用性能分析工具深入排查:
perf stat -e L1-dcache-load-misses,L1-dcache-load-hits统计L1数据缓存的命中率和缺失率(缺失率高表示缓存效率低,可能因缓存大小不足或数据访问模式不合理)。lsof | grep deleted查看已被删除但仍被进程打开的文件(这些文件可能占用缓存且无法释放,导致磁盘空间不足)。nmon(yum install nmon),通过c键监控CPU缓存命中率、m键监控内存缓存使用情况,实时分析缓存性能瓶颈。vm.dirty_background_ratio和vm.dirty_ratio参数,清理无用缓存,增加物理内存或交换空间(sudo dd if=/dev/zero of=/swapfile bs=1G count=8创建8GB交换文件,sudo mkswap /swapfile格式化,sudo swapon /swapfile启用)。systemctl restart httpd)。maxmemory参数)。通过以上步骤,可系统性地排查CentOS缓存故障,从现象到根源逐步定位问题并解决。操作前建议备份重要数据,避免误操作导致数据丢失。