首页主机资讯怎样通过centos提升磁盘I/O性能

怎样通过centos提升磁盘I/O性能

时间2025-11-18 14:51:04发布访客分类主机资讯浏览1145
导读:CentOS 磁盘 I/O 性能提升实战指南 一 基线测量与定位瓶颈 安装监控与压测工具:执行 yum install -y sysstat fio 获取 iostat/vmstat 与 fio。 快速体检: iostat -x 1 1...

CentOS 磁盘 I/O 性能提升实战指南

一 基线测量与定位瓶颈

  • 安装监控与压测工具:执行 yum install -y sysstat fio 获取 iostat/vmstatfio
  • 快速体检:
    • 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 -hTdf -i 检查容量与 inode 是否耗尽。
  • 建立可复现的基准:用 fio 做 4K 随机/顺序、读/写基线(示例见下文),便于优化前后对比。
  • 识别磁盘类型:lsblk -d -o NAME,ROTAcat /sys/block/sdX/queue/rotationalROTA=0 为 SSD/NVMe,ROTA=1 为 HDD

二 内核与虚拟层调优

  • I/O 调度器选择与设置
    • 原则:SSD/NVMe 用 none/noopHDD 用 mq-deadline(或 deadline),数据库类高并发也常用 deadline。
    • 临时生效:echo none > /sys/block/nvme0n1/queue/schedulerecho 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
      
  • 文件系统挂载优化
    • 减少元数据写入:在 /etc/fstab 中为数据盘增加 noatime(必要时 nodiratime)。
    • 选择文件系统:CentOS 7 默认 XFS,适合大文件/高吞吐;ext4 支持在线收缩,可按场景选择。

三 存储栈与架构优化

  • 缓存加速
    • 使用 LVM CacheBcacheSSD 做缓存加速 HDD,适合读多写少或热点数据场景。
  • 分层与冗余
    • 采用合适的 RAID(如 RAID10/RAID5/RAID6)提升吞吐与可靠性;对日志、数据库等高压业务进行 磁盘隔离
  • 内存盘与临时数据
    • 将可丢失或临时数据放入 tmpfs(如 /dev/shm),显著降低 I/O 压力。
  • 文件系统选择要点
    • 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
centos系统中如何安全删除文件 如何使用centos命令行清理系统

游客 回复需填写必要信息