银河麒麟v10在高i/o负载下需调优脏页参数:临时调整用sysctl修改vm.dirty_ratio=60和vm.dirty_background_ratio=40;永久生效可写入/etc/sysctl.d/99-kernel-io.conf;还可延长脏页存活时间至60秒并缩短回写间隔至5秒以优化写聚合。

银河麒麟V10系统在执行大量小文件读写、数据库导入导出或日志高频刷盘时,若出现I/O延迟高、write wait占比异常、磁盘队列深度持续大于1等现象,说明默认的内核文件读写缓冲区(page cache与dirty page机制)已无法匹配当前负载特征,需针对性调整缓冲区大小参数。
临时修改脏页回写阈值(立即生效,重启失效)
该方法适用于突发性I/O压力场景,如批量日志归档、临时数据迁移,无需重启即可生效,但仅维持至下次关机。
第一步:查看当前脏页触发回写的百分比阈值:sysctl vm.dirty_ratio。默认值通常为30,表示当脏页占系统内存比例超过30%时强制同步刷盘。
第二步:将触发阈值临时调高至60,延缓强制刷盘频率:sudo sysctl -w vm.dirty_ratio=60。这能显著减少因频繁sync导致的I/O阻塞,但【必须同步调整vm.dirty_background_ratio,否则可能引发内存耗尽】。
第三步:设置后台异步回写启动阈值为40:sudo sysctl -w vm.dirty_background_ratio=40。该值必须严格小于dirty_ratio,否则内核将拒绝设置并报错“Invalid argument”。
第四步:验证两项参数是否同步更新:sysctl vm.dirty_ratio vm.dirty_background_ratio,输出应显示60和40。
永久修改缓冲区参数(写入配置文件)
适用于长期运行的数据库服务器、消息中间件节点等对I/O稳定性要求高的生产环境,确保每次开机自动加载优化后的缓冲策略。
方法一:直接追加配置到sysctl.conf
执行echo "vm.dirty_ratio = 60" | sudo tee -a /etc/sysctl.conf。
执行echo "vm.dirty_background_ratio = 40" | sudo tee -a /etc/sysctl.conf。
执行sudo sysctl -p重载配置,立即应用且持久化。
方法二:创建独立配置片段(推荐,避免污染主配置)
新建专用配置文件:
sudo tee /etc/sysctl.d/99-kernel-io.conf vm.dirty_ratio = 60<br>vm.dirty_background_ratio = 40<br>EOF。
该方式便于版本管理与快速禁用,只需删除该文件再执行sudo sysctl --system即可回滚。
调整脏页生命周期(控制缓存驻留时间)
当业务存在周期性写入高峰(如每小时定时ETL任务),延长脏页在内存中停留时间可聚合写操作、降低磁盘寻道次数,但会增加断电丢数据风险。
执行sudo sysctl -w vm.dirty_expire_centisecs=6000,将脏页最大存活时间从默认5秒(500厘秒)延长至60秒。该值单位为厘秒(centiseconds),不可设为0。
执行sudo sysctl -w vm.dirty_writeback_centisecs=500,缩短内核后台回写线程唤醒间隔至5秒(默认500厘秒),加快脏页分批刷出节奏,避免单次刷盘量过大造成I/O毛刺。
注意:【vm.dirty_expire_centisecs必须大于vm.dirty_writeback_centisecs,否则内核会忽略expire设置】。











