查看缓存使用情况
free -h
命令查看内存使用概况,其中buff/cache
列表示系统缓存(包括页缓存、目录项缓存等)的占用情况,available
列表示系统可用内存(已扣除缓存,更准确反映可用资源)。vmstat 1
命令实时监控虚拟内存统计信息,重点关注cache
(页缓存)、buff
(缓冲区缓存)列的变化,以及si/so
(磁盘交换)列是否升高(可能提示内存不足)。清理系统缓存
sync
(避免数据丢失);echo 1 > /proc/sys/vm/drop_caches
;echo 2 > /proc/sys/vm/drop_caches
;echo 3 > /proc/sys/vm/drop_caches
。调整内核缓存参数
/proc/sys/vm/vfs_cache_pressure
(默认值100):值越大,内核越倾向于回收缓存(如目录项、inode),适用于缓存占用过多的场景;/proc/sys/vm/dirty_ratio
(默认值20,单位%):当脏页(未写入磁盘的内存页)占比达到该值时,系统强制将脏页写入磁盘,可降低缓存占用但增加I/O负载。检查缓存数据与状态
redis-cli
工具连接Redis,执行以下命令:
GET key
/SET key value
:验证缓存存取功能是否正常;TTL key
:查看缓存数据的过期时间(避免长期不刷新);KEYS *
/SCAN
:查看缓存中的所有Key(生产环境慎用KEYS *
,可能阻塞Redis);INFO stats
:获取缓存命中率(keyspace_hits
/keyspace_misses
的比值,比值越高说明缓存效率越好)。排查缓存问题
Redis
的KEYEVENT
通知机制或应用层代码实现同步);SETNX
命令)防止高并发下缓存重建;BF.ADD
/BF.EXISTS
命令)拦截无效请求,或在数据库查询返回空值时缓存短暂“空数据”(如设置过期时间60秒)。使用cpustat
监控CPU缓存
sysstat
工具包:sudo yum install sysstat
;cpustat -C -e 1
命令(-C
显示每个CPU核心的详细信息,-e
显示扩展统计信息,1
表示每秒更新一次);L1-dcache-load-hits
/L1-dcache-load-misses
、L2-cache-hit
/L2-cache-miss
),命中率越高说明CPU缓存效率越好。使用perf
工具分析
perf stat -e L1-dcache-load-misses,L1-dcache-load-hits,L1-icache-load-misses,L1-icache-load-hits -p <PID>
命令(<PID>
为目标进程ID),统计指定进程的CPU缓存命中率;perf record
和perf report
命令深入分析缓存未命中的函数或代码段(如perf record -e cache-misses -p <PID>
记录缓存未命中事件,perf report
查看报告)。查看系统日志
/var/log/messages
、/var/log/syslog
或应用程序日志(如/var/log/httpd/error_log
、/var/log/mysqld.log
),查找与缓存相关的错误或警告信息(如“Out of memory”、“Cache corruption”)。监控进程资源占用
top
、htop
或ps
命令查看进程的内存占用情况(重点关注RES
(常驻内存)、SHR
(共享内存)列),识别占用缓存过多的进程;lsof | grep deleted
命令查看已被删除但仍被进程占用的文件(可能导致缓存无法释放)。验证缓存生效
SET key new_value
后,GET key
是否返回新值);free -h
中的buff/cache
列是否增加(表示文件被缓存)。命令 | 作用 |
---|---|
sync |
同步数据到磁盘,避免清理缓存时数据丢失 |
echo 1 > /proc/sys/vm/drop_caches |
清理页缓存 |
echo 2 > /proc/sys/vm/drop_caches |
清理目录项和inode缓存 |
echo 3 > /proc/sys/vm/drop_caches |
清理所有缓存(页缓存+目录项+inode) |
sudo yum clean all |
清理YUM缓存(临时文件、旧版本软件包) |
redis-cli FLUSHALL |
清理Redis所有缓存数据 |