温馨提示×

ubuntu缓存占用高怎么办

小樊
46
2025-11-16 12:33:00
栏目: 智能运维

Ubuntu 缓存占用高的定位与处理

一 先判断是内存缓存还是磁盘缓存

  • 内存缓存高:运行 free -h 或 top/htop,若看到 buff/cache 数值很大,但 available 仍然充足,这通常是 Linux 为提高性能而利用空闲内存做缓存,属正常行为;当应用需要更多内存时会自动回收。若此时系统变慢或可用内存趋近 0,再考虑手动干预。
  • 磁盘缓存高:运行 df -h 或 du -sh /var/cache 等,若 /var/cache/apt、日志目录或浏览器缓存占用异常,说明是磁盘空间被缓存文件吃满,需要清理。

二 快速释放内存缓存(仅在确有性能问题时执行)

  • 手动清理(三种粒度):
    • 仅清理页面缓存:sudo sh -c ‘sync && echo 1 > /proc/sys/vm/drop_caches’
    • 清理目录项与 inode:sudo sh -c ‘sync && echo 2 > /proc/sys/vm/drop_caches’
    • 清理页面缓存 + slab(含 dentry/inode):sudo sh -c ‘sync && echo 3 > /proc/sys/vm/drop_caches’
  • 说明与风险:
    • 执行前先 sync,避免数据未落盘;清理会触发额外 IO,短时间内可能变慢。
    • 该操作仅对当前有效,内核会在需要时重新填充缓存;若频繁需要清理,应优先排查占用内存的具体进程或调整工作负载。

三 清理磁盘缓存与日志释放空间

  • APT 缓存:
    • 查看大小:du -csh /var/cache/apt
    • 清理全部:sudo apt-get clean
    • 仅清理旧版本:sudo apt-get autoclean
  • 系统日志(journald):
    • 查看占用:journalctl --disk-usage
    • 按时间保留:sudo journalctl --vacuum-time=2d(保留最近 2 天)
    • 按大小保留:sudo journalctl --vacuum-size=500M
  • 缩略图缓存:
    • 查看大小:du -sh ~/.cache/thumbnails
    • 清理:rm -rf ~/.cache/thumbnails/*
  • 旧内核(避免 /boot 分区被占满):
    • 自动移除旧内核及配置:sudo apt-get --purge autoremove
  • 浏览器缓存:
    • Chrome:在地址栏输入 chrome://settings/clearBrowserData
    • Firefox:在地址栏输入 about:cache 并执行清除缓存

四 预防与长期优化

  • 定期维护:将 APT 清理、日志轮转纳入例行维护;必要时使用图形化工具如 Disk Usage AnalyzerUbuntu Cleaner 做可视化清理(第三方工具请确认来源可信)。

  • 控制 VFS 缓存回收倾向:如长期出现 buff/cache 回收不及时,可适当提高内核参数 vm.vfs_cache_pressure(默认一般为 100,取值范围 0–200;数值越大,回收越积极)。示例:sudo sysctl -w vm.vfs_cache_pressure=150(重启后失效,写入 /etc/sysctl.conf 可持久化)。

  • 降低日志占用:配置 logrotate 合理轮转与压缩,避免单个日志无限增长。

  • 规范软件管理:

    • 使用 APT 时优先用官方仓库与版本,减少频繁安装/卸载造成的残余。
    • 如使用 Snap,定期清理旧版本:snap list --all 查看,结合 snap remove <版本号> 删除不再需要的旧修订。

0