在调整缓存策略前,需先了解系统缓存的使用状态,常用命令如下:
free -h:查看内存、缓冲区(Buffers)和缓存(Cached)的使用情况,区分“已用”与“可用”内存(可用内存=空闲+Buffers/Cached)。vmstat 1:实时监控虚拟内存统计信息,重点关注cache(文件缓存)和buff(缓冲区缓存)的变化,以及si/so(磁盘交换)是否频繁。iostat -x 1:分析磁盘I/O负载,间接判断缓存对I/O的缓解效果(如%util接近100%说明磁盘瓶颈,需优化缓存)。内核参数直接影响缓存的分配、回收和使用效率,需根据系统场景调整:
vm.swappiness(交换空间使用倾向)
10(减少Swap使用,提升内存访问速度)。# 临时调整
echo 10 > /proc/sys/vm/swappiness
# 永久生效(写入sysctl.conf)
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p
vm.dirty_ratio与vm.dirty_background_ratio(脏页控制)
dirty_ratio(默认20)表示脏页(未写入磁盘的内存页)占总内存的比例,超过则触发同步写入;dirty_background_ratio(默认10)表示后台异步写入的脏页阈值。dirty_ratio=40、dirty_background_ratio=10),可减少频繁磁盘I/O,提升缓存写入效率(适用于写密集型场景)。echo "vm.dirty_ratio=40" >> /etc/sysctl.conf
echo "vm.dirty_background_ratio=10" >> /etc/sysctl.conf
sysctl -p
vm.vfs_cache_pressure(inode/dentry缓存回收倾向)
50(减少关键缓存回收,提升文件系统访问性能)。echo "vm.vfs_cache_pressure=50" >> /etc/sysctl.conf
sysctl -p
文件系统缓存(Page Cache、目录缓存、inode缓存)是CentOS缓存的核心,需通过挂载选项和工具优化:
启用noatime挂载选项
/etc/fstab,在对应挂载点添加noatime选项(如/dev/sda1 / ext4 defaults,noatime 0 1),然后执行mount -o remount /生效。定期清理无用缓存
# 清理Page Cache(1)
echo 1 > /proc/sys/vm/drop_caches
# 清理目录项和inode缓存(2)
echo 2 > /proc/sys/vm/drop_caches
# 清理所有缓存(3,慎用)
echo 3 > /proc/sys/vm/drop_caches
# 建议先sync同步数据
sync && echo 3 > /proc/sys/vm/drop_caches
应用层缓存可减少对数据库、磁盘的直接访问,提升响应速度:
内存缓存(Redis/Memcached)
maxmemory参数),设置合理的过期策略(如LRU)。/etc/redis.conf):maxmemory 4gb
maxmemory-policy allkeys-lru
Web缓存(Nginx/Varnish)
/etc/nginx/nginx.conf):proxy_cache_path /tmp/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
location /static/ {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_pass http://backend;
}
}
/etc/varnish/default.vcl):backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_backend_response {
set beresp.ttl = 1h;
}
若软件优化无法满足需求,可通过硬件升级提升缓存性能:
$upstream_cache_status、Redis的INFO stats)、内存使用情况,及时调整策略。