温馨提示×

如何在CentOS中优化磁盘I/O

小樊
32
2025-12-17 14:25:04
栏目: 智能运维

CentOS 磁盘 I/O 优化实操指南

一 基线测量与定位瓶颈

  • 使用系统自带工具建立性能基线并持续观测:
    • 全局 I/O 与延迟:iostat -dxm 2(关注 await、r_await、w_await、svctm、util
    • 进程级热点:iotop -oPa(识别占用 I/O 的进程)
    • 综合压力与回归测试:fio(示例:fio --name=randread --ioengine=libaio --rw=randread --bs=4k --numjobs=4 --size=1G --runtime=60)
    • 说明:iostat 的 util≈100% 表示设备饱和;await 高而 svctm 低多为队列拥堵;await 与 svctm 接近且高多为设备本身瓶颈。

二 内核与虚拟内存参数调优

  • 脏页刷写阈值(按内存与写入特性调整,示例为保守低延迟):
    • 临时生效:sysctl -w vm.dirty_background_ratio=5;sysctl -w vm.dirty_ratio=10
    • 永久生效:在 /etc/sysctl.conf 添加
      • vm.dirty_background_ratio=5
      • vm.dirty_ratio=10
    • 刷新间隔与过期时间(持续写入可适当缩短以“削峰填谷”):
      • sysctl -w vm.dirty_writeback_centisecs=100(每 1 秒)
      • sysctl -w vm.dirty_expire_centisecs=3000(30 秒)
  • 交换倾向(尽量保留页面缓存,减少 swap 抖动):
    • sysctl -w vm.swappiness=10(数据库/缓存型负载常用;默认值通常为 60)
  • 目录与索引节点缓存回收倾向(元数据密集场景可适当降低以保留 dentry/inode):
    • sysctl -w vm.vfs_cache_pressure=50
  • 说明:调大脏页阈值可提升突发写吞吐,但会增加掉电风险与回写抖动;调小阈值与缩短过期时间可降低提交延迟但增加 I/O 次数。

三 块层与 I/O 调度器

  • 查看与切换调度器(示例设备 sda):
    • 查看:cat /sys/block/sda/queue/scheduler
    • 临时切换:echo deadline > /sys/block/sda/queue/scheduler
  • 永久生效(GRUB2,CentOS 7/8 常用):
    • grubby --update-kernel=ALL --args=“elevator=deadline”
    • 重启后验证
  • 队列与预读(按设备与负载微调):
    • 增大队列深度:echo 256 > /sys/block/sda/queue/nr_requests
    • 提升顺序读预读:echo 4096 > /sys/block/sda/queue/read_ahead_kb
  • 选择建议:
    • SSD/NVMe/虚拟化:NOOP(减少重排序开销)
    • HDD 高并发/数据库:Deadline(避免读写饥饿)
    • 通用桌面/多媒体:CFQ(公平分配带宽)

四 文件系统与挂载选项

  • 文件系统选择:
    • XFS:大文件、海量小文件、高并发元数据场景表现优,支持在线碎片整理,适合视频/日志/对象存储等。
    • EXT4:通用稳定、生态成熟,适合常规服务器与数据库。
  • 挂载选项(减少不必要元数据写入、提升吞吐):
    • 添加 noatime,nodiratime(避免更新访问时间)
    • 示例(/etc/fstab):UUID=… /data xfs defaults,noatime,nodiratime 0 0
  • SSD 维护:
    • 启用 TRIM:挂载参数加 discard,或定期执行 fstrim -v /mount_point
  • 日志模式(EXT4,权衡安全与性能):
    • ordered(默认,仅元数据日志,较平衡)
    • writeback(更高性能,数据一致性弱于 ordered)
    • journal(最安全,最慢)
  • 说明:XFS 在大文件与并发元数据场景通常优于 EXT4;EXT4 的 extent/delayed allocation 有利于顺序大 I/O。

五 进阶方案与上线验证

  • 分层缓存与加速:
    • bcache:以 SSD 为缓存加速 HDD(示例:make-bcache -C /dev/sdb -B /dev/sdc;缓存模式可选 writeback/writethrough;生产建议 writeback 配合 UPS
  • 异步 I/O(AIO):
    • 应用层使用 libaioio_uring 可降低线程阻塞、提升并发 I/O 能力(数据库、日志、消息队列等高并发写场景收益明显)
  • 上线验证与回滚:
    • 使用 fio 进行相同工作负载的 A/B 对比,关注 IOPS、带宽、p95/p99 延迟、util
    • 逐步推广配置,保留回滚方案;变更前备份关键数据与配置
  • 风险提示:
    • 修改调度器、队列深度、脏页参数与挂载选项可能影响数据一致性与稳定性;生产环境务必在维护窗口内操作,并准备回滚计划。

0