在 Linux 中,“缓存”通常指 Page Cache(页缓存)、dentry/inode 缓存,以及可选的 swap 行为。优化 Linux 缓存不是“越大越好”或“越小越好”,而是根据**业务类型(IO 密集 / 内存敏感 / 低延迟)**来做权衡。
下面从 原理 → 常用优化手段 → 场景化建议 系统说明。
Linux 默认策略:
空闲内存 = 浪费内存 能缓存就缓存,内存紧张时自动回收
通过命令查看:
free -h
cat /proc/meminfo
关键字段:
BuffersCachedSReclaimable(可回收 slab)写文件时,数据先进 page cache,再异步刷盘。
sysctl -a | grep dirty
常见参数:
vm.dirty_background_ratio:后台刷盘阈值(% 内存)vm.dirty_ratio:强制同步刷盘阈值vm.dirty_expire_centisecs:脏页最大存活时间vm.dirty_writeback_centisecs:刷盘周期vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
延迟敏感系统:降低 dirty 比例,避免突发 IO
cat /proc/sys/vm/swappiness
60vm.swappiness = 1~10
vm.vfs_cache_pressure
100cat /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 释放 pagecache
echo 1 > /proc/sys/vm/drop_caches
# 释放 dentries + inodes
echo 2 > /proc/sys/vm/drop_caches
# 全部
echo 3 > /proc/sys/vm/drop_caches
⚠️ 仅用于:
vm.swappiness = 1
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
THP = never
数据库自己管理缓存,OS 缓存是“辅助”
swappinessmlock 关键内存cache 不计入可用内存的误区ionice / nice 控制 IO 与 CPUfadvise / madvise 提示内核tmpfs 放临时文件io_uring 降低缓存依赖vmstat 1
iostat -x 1
sar -r 1
slabtop
cat /proc/buddyinfo
如果你愿意,可以告诉我:
我可以直接给你一套 可落地的 sysctl 配置。