怎样通过centos提升磁盘I/O性能
导读:CentOS 磁盘 I/O 性能提升实战指南 一 基线测量与定位瓶颈 安装监控与压测工具:执行 yum install -y sysstat fio 获取 iostat/vmstat 与 fio。 快速体检: iostat -x 1 1...
CentOS 磁盘 I/O 性能提升实战指南
一 基线测量与定位瓶颈
- 安装监控与压测工具:执行
yum install -y sysstat fio获取 iostat/vmstat 与 fio。 - 快速体检:
iostat -x 1 10观察 await、r/s、w/s、rkB/s、wkB/s、util%;util 持续接近 100% 多为瓶颈所在。vmstat 1 10关注 wa(I/O 等待)、si/so(换入换出)。df -hT与df -i检查容量与 inode 是否耗尽。
- 建立可复现的基准:用 fio 做 4K 随机/顺序、读/写基线(示例见下文),便于优化前后对比。
- 识别磁盘类型:
lsblk -d -o NAME,ROTA或cat /sys/block/sdX/queue/rotational,ROTA=0 为 SSD/NVMe,ROTA=1 为 HDD。
二 内核与虚拟层调优
- I/O 调度器选择与设置
- 原则:SSD/NVMe 用 none/noop,HDD 用 mq-deadline(或 deadline),数据库类高并发也常用 deadline。
- 临时生效:
echo none > /sys/block/nvme0n1/queue/scheduler;echo mq-deadline > /sys/block/sda/queue/scheduler。 - 永久生效(udev):
cat > /etc/udev/rules.d/60-ioscheduler.rules < < 'EOF' ACTION=="add|change", KERNEL=="nvme[0-9]n[0-9]", ATTR{ queue/rotational} =="0", ATTR{ queue/scheduler} ="none" ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{ queue/rotational} =="0", ATTR{ queue/scheduler} ="none" ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{ queue/rotational} =="1", ATTR{ queue/scheduler} ="mq-deadline" EOF udevadm control --reload-rules & & udevadm trigger
- 脏页与回写阈值(权衡性能与断电风险)
- 适度增大脏页上限,减少过早同步写带来的阻塞:
echo 40 > /proc/sys/vm/dirty_ratio echo 20 > /proc/sys/vm/dirty_background_ratio - 注意:增大脏页比例会提升意外断电时的数据丢失风险;关键数据应使用 O_DIRECT 或应用层落盘策略。
- 适度增大脏页上限,减少过早同步写带来的阻塞:
- 顺序读场景的文件预读
- 默认 read_ahead_kb=128 KB;顺序读较多时可适度增大,例如:
echo 4096 > /sys/block/sdX/queue/read_ahead_kb
- 默认 read_ahead_kb=128 KB;顺序读较多时可适度增大,例如:
- 文件系统挂载优化
- 减少元数据写入:在 /etc/fstab 中为数据盘增加 noatime(必要时 nodiratime)。
- 选择文件系统:CentOS 7 默认 XFS,适合大文件/高吞吐;ext4 支持在线收缩,可按场景选择。
三 存储栈与架构优化
- 缓存加速
- 使用 LVM Cache 或 Bcache 以 SSD 做缓存加速 HDD,适合读多写少或热点数据场景。
- 分层与冗余
- 采用合适的 RAID(如 RAID10/RAID5/RAID6)提升吞吐与可靠性;对日志、数据库等高压业务进行 磁盘隔离。
- 内存盘与临时数据
- 将可丢失或临时数据放入 tmpfs(如
/dev/shm),显著降低 I/O 压力。
- 将可丢失或临时数据放入 tmpfs(如
- 文件系统选择要点
- XFS:大分区/大文件表现优,但不支持在线收缩;
- ext4:生态成熟,支持在线收缩,通用性强。
四 LVM 与文件系统扩容实践
- 在线扩容 LVM 逻辑卷与文件系统(示例将 /dev/vg0/var 增加 50G)
# 扩展逻辑卷 lvextend -L +50G /dev/vg0/var # 扩展文件系统(XFS) xfs_growfs /var # 如为 ext4,使用:resize2fs /dev/vg0/var df -h /var # 验证 - 非 LVM 场景(云盘系统盘扩容分区后)
yum install -y cloud-utils-growpart growpart /dev/sda 3 partprobe /dev/sda xfs_growfs / # 或 resize2fs 对应分区 - 风险提示:扩容前务必做好 备份/快照;LVM 扩容为单向操作,建议准备回滚方案。
五 验证与回退
- 基准测试示例(fio,直接 I/O,libaio,4K,队列深度 64)
# 随机读 fio --name=randread --ioengine=libaio --rw=randread --bs=4k --numjobs=4 --size=1G --runtime=60 --direct=1 --iodepth=64 --group_reporting # 随机写 fio --name=randwrite --ioengine=libaio --rw=randwrite --bs=4k --numjobs=4 --size=1G --runtime=60 --direct=1 --iodepth=64 --group_reporting # 顺序读/写 fio --name=seqread --ioengine=libaio --rw=read --bs=4k --numjobs=4 --size=1G --runtime=60 --direct=1 --iodepth=64 --group_reporting fio --name=seqwrite --ioengine=libaio --rw=write --bs=4k --numjobs=4 --size=1G --runtime=60 --direct=1 --iodepth=64 --group_reporting - 回退与观察
- 调度器与预读参数均为运行时可调,异常可快速恢复默认值;
- 持续用
iostat -x 1观察 await、util% 等指标是否改善,并与 fio 基线对比确认收益。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 怎样通过centos提升磁盘I/O性能
本文地址: https://pptw.com/jishu/750148.html
