本文基于实际运维经验,提供一套可复制的检查与优化流程——先做基准测试定位瓶颈,再从硬件选型、文件系统与挂载参数、内核/调度器调优、虚拟化驱动与队列、以及应用缓存与数据库参数五个层面逐项优化,最终通过持续监控和回归测试确保在台湾服务器、走双向CN2链路的虚拟主机上获得稳定且可量化的I/O性能提升。
第一步用工具建立基线:fio(随机/顺序读写)、iostat、iotop、blktrace、sar。典型fio命令示例:fio --name=randread --rw=randread --bs=4k --ioengine=libaio --iodepth=32 --size=1G --numjobs=1。记录latency、iops与带宽,结合iostat -x查看await、svctm、util。通过这些数据判断是延迟高(seek/队列瓶颈)还是吞吐低(带宽/队列深度不足)。
优先选配NVMe或企业级SSD。部署时考虑RAID类型:对读密集型用RAID10,对写入与容错权衡可用RAID1+热备。文件系统推荐XFS或EXT4配合O_DIRECT或noatime挂载选项,避免双重缓存;对数据库节点启用O_DIRECT并调整fsync策略。挂载建议追加noatime,nodiratime,commit=1000等视场景调整。
现代NVMe与多核系统适合开启blk-mq和noop或mq-deadline调度器以减少内核调度开销:echo mq-deadline > /sys/block/
若使用KVM/LXC,优先启用virtio-scsi/virtio-blk并打开多队列(multiqueue)与I/O线程,设置合理的队列深度(nr_requests)以配合宿主设备性能。对容器场景禁用不必要的IO限制或合理分配blkio权重。对OpenVZ或共享宿主机,应通过fio在多租户场景测试争抢情况,必要时使用IO限流与隔离。
应用层尽量使用内存缓存(memcached/redis/opcache)减小磁盘读写。MySQL/MariaDB调优:innodb_buffer_pool_size设为内存的60–70%、innodb_flush_method=O_DIRECT、innodb_io_capacity根据SSD能力设置(如1000+),将binlog同步策略与flush_log_at_trx_commit视业务容错调整以减少频繁fsync。
部署Prometheus+Grafana或Zabbix监控iostat、fio历史、disk latency、队列长度、CPU与IRQ负载。设置告警阈值:p99延迟、IOPS下降或util接近100%触发。同时在每次内核或驱动升级、迁移后重新跑fio对比基线,记录变更单与回滚方案,确保线上不会因单次调整引发服务抖动。
在CN2链路下建议同时关注网络与磁盘的交互:针对高并发小包场景启用多核中断分散(irqbalance或手动分配),并结合TCP参数优化(如tcp_congestion_control选择bbr或hybla视链路情况)以降低网络等待导致的I/O堆积。所有改动应逐项生效验证,避免一次性大改带来不可预期的回归。