在開始排查前,需先定位故障范圍(硬件/軟件/網絡/緩存本身),并通過基礎命令確認系統狀態:
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緩存故障,從現象到根源逐步定位問題并解決。操作前建議備份重要數據,避免誤操作導致數據丟失。