ubuntu缓存设置多少合适
小樊
41
2025-11-16 12:32:00
Ubuntu 缓存设置建议
总体原则
- 不要“手工设定一个固定的缓存大小”。Linux 内核的页面缓存 Page Cache与可回收 Slab会自动利用空闲内存加速文件访问,内存紧张时会自动回收,通常无需人工限制。需要关注的不是“给缓存多少”,而是“如何引导内核更合理地使用内存与写入策略”。
- 优先从三类可调项入手:swappiness(交换倾向)、脏页阈值(dirty_ratio/background_ratio)、以及各类“应用层缓存”(如 APT、DNS、编译缓存等)。
关键参数与推荐值
- 内存交换倾向 vm.swappiness
- 作用:控制内核将数据换出到交换分区的倾向。
- 建议:多数桌面/服务器设为10–20;若内存充足且希望尽量利用内存做缓存,可更低;若易出现内存压力,可提高到30。默认值通常为60。
- 查看/设置:
- 查看:cat /proc/sys/vm/swappiness
- 临时:sudo sysctl vm.swappiness=10
- 永久:在 /etc/sysctl.conf 添加 vm.swappiness=10
- 脏页写回阈值 vm.dirty_ratio / vm.dirty_background_ratio
- 作用:决定何时把“脏页”写回磁盘。background_ratio 触发后台回写;ratio 触发前台(可能阻塞)回写。
- 建议:桌面交互优先流畅可设 background_ratio 为5–10,ratio 为10–20;写入密集型(大量日志/下载)可适当提高,减少抖动。
- 查看/设置:
- 查看:cat /proc/sys/vm/dirty_background_ratio;cat /proc/sys/vm/dirty_ratio
- 临时:sudo sysctl vm.dirty_background_ratio=10;sudo sysctl vm.dirty_ratio=20
- 永久:写入 /etc/sysctl.conf
- 应用层缓存(按需设置容量)
- APT 包缓存:定期清理即可,无需固定大容量。命令:sudo apt-get clean;sudo apt-get autoclean;sudo apt-get autoremove
- DNS 缓存:使用 dnsmasq 时可设缓存内存,例如 cache-mem 512(单位 KB,约512MB);重启服务生效。
- 编译缓存:ccache 或 sccache,按项目规模与并发设置缓存目录大小(无硬性通用值,建议启用并观察命中率)。
不同场景的实用配置
- 桌面与通用办公:swappiness 10–20;dirty_background_ratio 5–10;dirty_ratio 10–20。侧重交互流畅与响应速度。
- 服务器与后台任务:swappiness 10–30;dirty_background_ratio 10–20;dirty_ratio 20–40。侧重吞吐与稳定性,避免前台写回阻塞。
- 编译/CI 环境:启用 ccache/sccache;按需增大缓存目录;保持 swappiness 偏低以利用内存加速构建。
- 低内存或易抖动环境:swappiness 可提高到30–60;适度提高 dirty_ratio,减少频繁写回引起的卡顿。
监控与调整方法
- 观察内存与缓存:free -m、top/htop、vmstat;关注 available 与 cache/buff 的变化趋势。
- 观察 I/O 与回写:iostat -x 1;留意 await、r/s、w/s、util 与 dirty 相关指标。
- 按需微调:先小幅调整 swappiness 与 dirty 阈值,观察一天内性能与稳定性的变化,再决定是否继续调整。
- 谨慎“清缓存”:仅在特殊场景(如基准测试、空间紧张)使用 echo 1/2/3 > /proc/sys/vm/drop_caches;日常不建议频繁清理,避免性能下降。