温馨提示×

ubuntu缓存为何不命中

小樊
52
2026-09-06 23:36:14
栏目: 智能运维

在 Ubuntu(或一般 Linux)系统中,“缓存不命中”可能出现在多个层面,常见原因和排查思路如下:


一、系统/文件系统缓存(Page Cache)不命中

这是最常见的“缓存”含义,指读取文件时没有直接从内存命中,而是走了磁盘。

常见原因

  1. 内存不足

    • 可用内存少,内核回收了 page cache
    • 查看:
      free -h
      cat /proc/meminfo | grep -E 'MemAvailable|Cached'
      
  2. 文件太大或访问不重复

    • 只访问一次的大文件不会常驻缓存
    • 随机读取、顺序不重复也会命中率低
  3. 缓存被主动清除

    • 有人执行过:
      echo 3 > /proc/sys/vm/drop_caches
      
    • 或某些监控/清理脚本定时清缓存
  4. 直接 I/O(Direct I/O)

    • 程序使用 O_DIRECT,绕过 page cache
    • 常见于数据库、某些备份工具
  5. 文件系统或挂载参数

    • 某些网络文件系统(NFS、SMB)缓存行为不同
    • 挂载时禁用了缓存选项

二、APT / 软件包缓存不命中

如果你指的是 apt 缓存:

常见原因

  1. 未执行 update
    sudo apt update
    
  2. 缓存已清理
    /var/cache/apt/archives/
    
  3. 源变更或版本不同
    • 包版本变化,旧缓存无效
  4. 使用 --no-cache 或代理

三、DNS 缓存不命中

Ubuntu 默认用 systemd-resolved

  • 服务未运行:
    systemctl status systemd-resolved
    
  • DNS 配置问题(/etc/resolv.conf
  • 短 TTL 导致频繁失效

四、应用层缓存(如 Redis / Nginx / Docker)

如果你说的是某个服务缓存不命中:

  • key 不一致
  • TTL 太短
  • 内存淘汰策略(LRU/LFU)
  • 多实例未共享缓存

五、快速排查建议

# 看缓存使用情况
free -h
cat /proc/meminfo

# 看是否清过缓存
dmesg | grep cache

# 看 I/O 是否走磁盘
iostat -x 1

如果你能具体说明是 哪种缓存不命中(系统缓存 / apt / DNS / 应用),我可以给出更精准的原因和解决方法。

0