在 Linux 中,“缓存”通常包含 页缓存(page cache)、目录项缓存(dentry cache)、inode 缓存 等,主要目的是提升 I/O 性能。是否“优化”取决于你的目标:提高命中率、释放内存、降低延迟,还是避免缓存影响特定业务。
下面从 原理 → 常用优化手段 → 实战建议 三个层面说明。
Linux 默认策略:
drop caches 只是手动触发)查看缓存占用:
free -h
cat /proc/meminfo
关键字段:
Cached:文件缓存Buffers:块设备缓冲Slab:内核对象(dentry/inode)适合:读多、文件大、I/O 频繁
noop / deadline IO 调度器(SSD)示例:
# 查看调度器
cat /sys/block/sda/queue/scheduler
避免缓存堆积导致突发 I/O:
sysctl -a | grep dirty
关键参数:
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
vm.dirty_expire_centisecs = 3000
vm.dirty_writeback_centisecs = 500
说明:
dirty_background_ratio:后台开始写回dirty_ratio:进程被阻塞前最大脏页比例✅ 数据库服务器建议调小
sync
echo 1 > /proc/sys/vm/drop_caches # 页缓存
echo 2 > /proc/sys/vm/drop_caches # dentries/inodes
echo 3 > /proc/sys/vm/drop_caches # 全部
⚠️ 注意:
对容器或特定进程:
memory.max = 2G
或使用 vmtouch 控制文件缓存:
vmtouch -t file
vmtouch -e file
O_DIRECT(数据库常用)posix_fadvise(DONTNEED)numactl --interleave=all
echo always > /sys/kernel/mm/transparent_hugepage/enabled
适合:
vmstat 1
iostat -x 1
sar -r 1
slabtop
Linux 缓存默认就是优化好的,不要盲目清理;真正优化是:控制脏页、匹配业务 IO 模式、合理使用内存。
如果你能告诉我:
我可以给你具体的参数配置方案。