温馨提示×

怎样管理linux缓存

小樊
33
2026-10-27 01:37:16
栏目: 智能运维

在 Linux 中,“缓存(cache)”通常指页缓存(page cache)、目录项缓存(dentry cache)和inode 缓存,它们用于加速文件读写。合理管理缓存可以提升性能,也可在特殊场景下主动释放。

下面从 查看、释放、自动管理、调优、常见误区 几个方面说明。


一、查看 Linux 缓存使用情况

1. 使用 free

free -h

关注:

  • buffers:块设备元数据缓存
  • cached:文件内容缓存(page cache)
  • available:估算的可用于新进程的内存

2. 使用 top / htop

  • buff/cache 一行即为缓存占用

3. 详细查看

cat /proc/meminfo

重点字段:

  • Cached
  • Buffers
  • Dirty
  • Writeback

二、手动释放缓存(慎用)

1. 释放缓存命令

# 同步数据到磁盘
sync

# 释放 pagecache
echo 1 > /proc/sys/vm/drop_caches

# 释放 dentries 和 inodes
echo 2 > /proc/sys/vm/drop_caches

# 释放所有缓存
echo 3 > /proc/sys/vm/drop_caches

⚠️ 注意:

  • 不会影响正在运行的程序
  • 会导致后续文件访问变慢
  • 一般只用于测试或排障

三、让系统自动管理缓存(推荐)

Linux 默认会智能管理缓存:

  • 内存充足 → 多用缓存
  • 内存紧张 → 自动回收

✅ 通常不需要人工干预


四、缓存相关内核参数调优

1. 脏页(dirty page)控制

# 查看
sysctl vm.dirty_ratio
sysctl vm.dirty_background_ratio

常见调整(示例):

vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

作用:

  • 控制多少脏数据写入内存
  • 防止突发写盘导致卡顿

2. swappiness(是否积极换页)

sysctl vm.swappiness
  • 默认 60
  • 服务器建议:10–30
  • 禁用 swap 风险高,不推荐设为 0

修改:

sysctl -w vm.swappiness=10

五、针对特殊场景的缓存管理

1. 数据库服务器(MySQL / PostgreSQL)

  • 通常 减少 OS 缓存依赖
  • 增大数据库自身 buffer
  • 示例:
vm.swappiness=10
vm.dirty_ratio=10

2. 大文件顺序读写

  • Linux 缓存收益有限
  • 可使用 O_DIRECT 或 fadvise

3. 容器 / 云环境

  • 注意 cgroup 内存限制
  • 缓存也计入 cgroup 内存

六、常见误区

❌ “缓存占用高 = 内存不足”
✅ 缓存是可回收内存

❌ “经常 drop_caches 能提速”
✅ 反而降低性能

❌ “关掉 swap 更好”
✅ 可能导致 OOM


七、实用监控命令

# 实时内存和缓存
watch -n 1 free -h

# IO 和缓存写回
vmstat 1

# 查看脏页
cat /proc/meminfo | grep Dirty

如果你有具体场景(如:数据库、桌面、嵌入式、容器、性能调优),我可以给你更针对性的缓存管理方案。

0 踩