如何在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):
- 应用层使用 libaio 或 io_uring 可降低线程阻塞、提升并发 I/O 能力(数据库、日志、消息队列等高并发写场景收益明显)
- 上线验证与回滚:
- 使用 fio 进行相同工作负载的 A/B 对比,关注 IOPS、带宽、p95/p99 延迟、util
- 逐步推广配置,保留回滚方案;变更前备份关键数据与配置
- 风险提示:
- 修改调度器、队列深度、脏页参数与挂载选项可能影响数据一致性与稳定性;生产环境务必在维护窗口内操作,并准备回滚计划。