在 Linux 中,“缓存”通常指 页缓存(page cache)、目录项缓存(dentry cache) 和 inode 缓存,这些是内核用来提升性能的机制。一般不建议完全禁用缓存,否则系统性能会严重下降。但如果你有特殊需求(如测试、嵌入式、特定实验),可以参考以下方法。
不会禁用,只是清理当前缓存
# 释放 pagecache
echo 1 > /proc/sys/vm/drop_caches
# 释放 dentries 和 inodes
echo 2 > /proc/sys/vm/drop_caches
# 释放所有缓存
echo 3 > /proc/sys/vm/drop_caches
⚠️ 需要 root 权限
⚠️ 只是一次性释放,系统仍会自动重新缓存
通过调整 swappiness 和 vfs_cache_pressure
# 尽量不使用 swap
sysctl vm.swappiness=0
# 更积极回收目录/inode缓存
sysctl vm.vfs_cache_pressure=10000
查看当前值:
sysctl vm.swappiness
sysctl vm.vfs_cache_pressure
使用 direct I/O 或 O_DIRECT
O_DIRECTdd if=/dev/sda of=/dev/null bs=4M iflag=direct
⚠️ 并非所有程序都支持
某些文件系统支持 sync 或 direct
mount -o sync /dev/sdb1 /mnt
或:
mount -o dirsync /dev/sdb1 /mnt
⚠️ 会显著降低性能
内核层面修改,需要重新编译内核
关闭 CONFIG_PAGE_CACHE 相关支持(不同内核版本差异很大),普通用户不建议尝试。
❌ echo 0 > /proc/sys/vm/drop_caches —— 这是无效操作
❌ 禁用缓存能让 IO 更快 —— 通常相反
✅ 正确做法是:释放缓存 + 调整策略
| 目的 | 推荐方式 |
|---|---|
| 测试磁盘真实性能 | O_DIRECT / dd iflag=direct |
| 清理内存 | echo 3 > /proc/sys/vm/drop_caches |
| 减少缓存占用 | 调整 vfs_cache_pressure |
| 完全禁用 | ❌ 不推荐 |
如果你能说明 具体使用场景(测试?数据库?嵌入式?),我可以给你更合适的方案。