温馨提示×

ubuntu缓存优化有哪些技巧

小樊
42
2025-12-08 05:48:39
栏目: 智能运维

Ubuntu 缓存优化实用技巧

一 系统层面缓存优化

  • 利用内核的 Page Cache / Buffer Cache:读多写少的负载下尽量让数据留在内存中,避免频繁落盘;仅在必要时才清理缓存。手动清理会触发回写脏页,带来短时 I/O 飙升,生产环境谨慎执行。常用清理方式:
    • 仅清理页面缓存:sudo sync && echo 1 | sudo tee /proc/sys/vm/drop_caches
    • 清理目录项与索引节点:sudo sync && echo 2 | sudo tee /proc/sys/vm/drop_caches
    • 清理全部可释放缓存:sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
  • 调整 swappiness 降低换页倾向(仅在物理内存充足时推荐):
    • 查看:cat /proc/sys/vm/swappiness
    • 临时设置:sudo sysctl -w vm.swappiness=10
    • 永久设置:在 /etc/sysctl.conf 中添加 vm.swappiness=10 并执行 sudo sysctl -p
  • 监控缓存命中与脏页:使用 cachestat / cachetop(eBPF/BCC)观察 HITS/MISSES、DIRTIES,定位缓存效果与瓶颈。示例:cachestat 1 3、cachetop。

二 存储与文件系统层优化

  • 选择合适的文件系统:通用场景用 ext4,大文件与高并发可用 XFS,需要快照/校验/动态扩容考虑 Btrfs
  • 优化挂载选项:优先使用 noatime/nodiratime 减少元数据写;在确保数据安全前提下,ext4 可考虑 data=writeback 降低写延迟(风险自负)。
  • 调整 I/O 调度器:
    • SSD/NVMe 推荐 noop / none(减少调度开销)
    • 低延迟/通用场景可用 deadline
    • 示例:echo deadline | sudo tee /sys/block/sdX/queue/scheduler
  • 调整内核脏页阈值:结合负载与设备写回能力,合理设置 vm.dirty_ratio / vm.dirty_background_ratio,避免一次性大回写造成抖动。
  • 基准与排查:用 fio / iostat -x 1 做压测与瓶颈定位,配合 dmesg/journalctl 分析 I/O 异常。

三 应用层缓存与预取

  • APT 包缓存:定期执行 sudo apt update(更新索引)、sudo apt-get autoclean(清理旧版本包)、sudo apt-get clean(清理已下载包)、sudo apt autoremove(移除不再依赖的包与旧内核),释放磁盘并保持仓库元数据新鲜。
  • DNS 缓存:
    • 使用本地 dnsmasq 做缓存:sudo apt-get install dnsmasq,在 /etc/dnsmasq.conf 中设置如 cache-size=512,然后 sudo systemctl restart dnsmasq
    • 若使用 systemd-resolved:sudo systemd-resolve --flush-caches
  • 运行时代码/编译缓存:
    • ccache / sccache 加速 C/C++ 编译:例如 CC=ccache gcc,显著提升重复构建速度
  • 应用数据缓存:
    • Memcached:sudo apt-get install memcached,编辑 /etc/memcached.conf 设置 -m 1024(单位 MB),重启服务
    • Redis:sudo apt-get install redis-server,在 /etc/redis/redis.conf 设置 maxmemory 1gb 与淘汰策略 maxmemory-policy allkeys-lru
  • 桌面/应用预取:preload 守护进程学习常用应用并预加载依赖,缩短启动时间。

四 网站与应用交付层缓存

  • 浏览器缓存:为静态资源设置 Cache-Control: max-age=31536000 等长期缓存头,减少重复下载。
  • 服务器缓存:对热点数据使用 Redis/Memcached,动态内容设置较短 TTL,避免脏读。
  • CDN 加速:将静态资源分发至全球节点,优先选择支持 Brotli 的 CDN(相较 Gzip 压缩率可提升约 20%)。
  • 资源优化:图片转 WebP(体积可减少约 30%)、启用 Brotli/Gzip、合并与压缩 CSS/JS、非关键脚本 异步加载

五 监控与维护建议

  • 基线对比:优化前后用 free、cachestat、iostat -x 1 记录内存与 I/O 指标,验证收益与回写抖动。
  • 按需清理:仅在磁盘紧张或测试场景使用 drop_caches;正常情况下交由内核自动回收。
  • 变更留痕:对 /etc/fstab、/etc/sysctl.conf、memcached/redis 配置 等变更做好备份与回滚方案。
  • 风险提示:修改 I/O 调度器、脏页阈值、文件系统挂载选项 可能影响数据安全与稳定性,务必在测试环境验证并保留应急手段。

0