温馨提示×

linux缓存为何变慢

小樊
43
2026-10-03 14:46:49
栏目: 智能运维

“Linux 缓存变慢”通常不是指缓存本身变慢,而是系统使用缓存后整体性能下降或命中率变低。下面按常见原因 → 表现 → 排查/解决来说明。


一、内存不足,缓存被频繁回收(最常见)

原因

  • 可用内存少,cache 很快被回收
  • 应用频繁申请/释放内存
  • 发生 swap

表现

  • free -h 中 available 很小
  • si/so(swap)不为 0
  • 磁盘 IO 明显升高

排查

free -h
vmstat 1
cat /proc/meminfo

解决

  • 增加内存
  • 限制占用内存的进程
  • 调整 swap 倾向:
sysctl vm.swappiness=10

二、缓存命中率下降(cache 没用上)

原因

  • 随机大文件读写(视频、备份)
  • 一次性扫描(find、rsync、备份)
  • 文件过大,cache 被冲掉

表现

  • cache 很高但 IO 仍高
  • hit ratio 低

排查

sar -B 1
cat /proc/vmstat | grep pg

解决

  • 避免全量扫描
  • 使用 direct IO 或 nocache
  • 限制缓存污染:
# 示例(需内核支持)
echo 1 > /proc/sys/vm/drop_caches  # 仅调试

三、磁盘 IO 本身是瓶颈

原因

  • 机械硬盘
  • RAID 降级
  • 云盘 IOPS 限制

表现

  • iostat 中 %util 接近 100%
  • await 很高

排查

iostat -x 1

解决

  • 换 SSD
  • 分散 IO
  • 调整电梯算法
cat /sys/block/sda/queue/scheduler

四、文件系统或挂载参数问题

原因

  • 未启用 cache 相关选项
  • atime 频繁更新
  • 文件系统损坏

解决示例

mount -o remount,noatime /data

五、NUMA / 多核内存访问问题

原因

  • 进程跨 NUMA 节点访问内存
  • 本地内存不足

排查

numactl --hardware
numastat

六、内核参数不合理

常见参数

vm.dirty_ratio
vm.dirty_background_ratio
vm.vfs_cache_pressure

建议

  • 写多:降低 dirty_ratio
  • 读多:降低 vfs_cache_pressure

七、被“误以为缓存慢”

实际上可能是:

  • DNS 慢
  • 网络慢
  • 应用锁竞争
  • GC 停顿

快速自诊清单

free -h
vmstat 1
iostat -x 1
sar -B 1
dmesg | tail

如果你能补充:

  • 是 读慢还是写慢
  • 是否 物理机 / 虚拟机 / 容器
  • 具体场景(数据库 / 文件服务 / 备份)

我可以给你更精确的定位方案。

0 踩