Linux 内核虚拟内存管理:Dirty Ratio 与 Swapiness 生产调优

举报
yd_228127354 发表于 2026/11/04 18:06:16 2026/11/04
【摘要】 一、Linux 脏页回写与内存回收机制当 Linux 系统中的进程执行磁盘写入操作时,数据首先被写入内核内存的 Page Cache(页面缓存)中,变为“脏页”(Dirty Pages)。内核依靠 kswapd 与 flush 守护线程在后台将脏页平稳刷新至物理磁盘。若参数配置不当,写入高峰期可能触发内核强制前台刷盘(Synchronous Write),导致整个系统的 I/O 线程出现长达...

一、Linux 脏页回写与内存回收机制

当 Linux 系统中的进程执行磁盘写入操作时,数据首先被写入内核内存的 Page Cache(页面缓存)中,变为“脏页”(Dirty Pages)。内核依靠 kswapd 与 flush 守护线程在后台将脏页平稳刷新至物理磁盘。若参数配置不当,写入高峰期可能触发内核强制前台刷盘(Synchronous Write),导致整个系统的 I/O 线程出现长达数十秒的卡顿停滞。

二、核心虚拟内存参数剖析

# /etc/sysctl.d/99-vm-tuning.conf
# 脏页占用物理内存达到 10% 时,后台线程开始异步回写
vm.dirty_background_ratio = 10

# 脏页占用物理内存达到 20% 时,进程自身必须阻塞并强制执行同步写入
vm.dirty_ratio = 20

# 脏页在内存中最长保留 30 秒(单位厘秒:3000)
vm.dirty_expire_centisecs = 3000
# 内核唤醒回写线程的周期为 5 秒
vm.dirty_writeback_centisecs = 500

# 优化内存换页积极性(swappiness)
# 在生产数据库服务器上建议设为 1~10,优先回收页缓存而非换出进程匿名内存
vm.swappiness = 10

# 控制内核内存过度分配策略 (0: 启发式过度分配)
vm.overcommit_memory = 1

三、大内存服务器下的绝对字节阈值配置

在配备 64GB~256GB 物理内存的云服务器上,直接使用比例参数可能导致单个阈值过大(例如 256GB 的 10% 为 25.6GB,单次刷入磁盘可能引发严重 I/O 阻塞)。此时应改用基于字节的精确配置:

# 设定后台刷盘阈值为 2GB,强制同步刷盘阈值为 4GB
vm.dirty_background_bytes = 2147483648
vm.dirty_bytes = 4294967296

四、验证与监控实战

利用 grep -i dirty /proc/meminfo 实时查看当前系统脏页总量,配合 vmstat 1 观察 bi(块读出)与 bo(块写入)指标,确保磁盘 I/O 维持在平稳状态,彻底告别写入爆发期系统无响应隐患。

本文发布于 2026-11-04,由自动化系统自动调优发布。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。