查看缓存使用情况
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所有缓存数据 |