本文从测试、排查到配置落地,提供面向在港机房使用香港vps且走cn2通路、配备500g磁盘的网络与磁盘IO性能优化策略,涵盖监测工具、内核参数、网络设备与磁盘调度的具体做法,便于工程师快速定位瓶颈并实施改进。
首先要做基线测试:网络用ping、mtr、iperf3测延迟与带宽;磁盘用fio、iostat、ioping测IO延时与吞吐。注意分别在不同时间段、不同对端进行测试以排除线路波动。通过sar、atop或dstat查看CPU、软中断、网卡队列(rx/tx)和磁盘队列深度,判断是链路(丢包/抖动)、主机CPU/中断或磁盘IO饱和导致性能问题。
cn2通常为中国电信的优质骨干路由,直连国内链路时抖动和跨境跳数更少。但并非自动最优,需要检查对端出口是否为CN2 GIA/CTG等专有线路,及是否存在错误的出接口或不良中转。用traceroute/mtr观察河南、广东等节点延时突增点,必要时向机房申请换出口或启用BGP多线。
常见优化包括启用BBR拥塞控制(Linux 4.9+),调整socket缓冲区和时间等待参数。示例:sysctl -w net.core.rmem_max=268435456 net.core.wmem_max=268435456 net.ipv4.tcp_rmem="4096 87380 268435456" net.ipv4.tcp_wmem="4096 65536 268435456" net.ipv4.tcp_congestion_control=bbr。关闭不必要的IPv6或禁用TCP timestamps视情况而定。对高并发场景,还要调大epoll队列与文件描述符上限。
检查网卡是否支持多队列(RSS)、TSO/GSO/LRO等offload特性。使用ethtool查看并设置:ethtool -K eth0 tso on gso on gro on;通过irqbalance或手动绑定IRQ(/proc/irq/*/smp_affinity)将中断分散到多个CPU核上。对虚拟化环境,确保hypervisor和驱动都开启多队列支持。
先确认磁盘类型(SSD/HDD/云盘)和虚拟化后端(本地盘或远端块存储)。对于SSD和云盘,通常建议使用mq-deadline或noop调度器;对于高并发随机写场景,XFS对延展性好,Ext4也可通过noatime、nodiratime和data=writeback等挂载参数改善性能。示例:mount -o noatime,nodiratime,discard,data=writeback /dev/vdb /data。定期run fstrim对SSD有效。
使用fio进行分阶段测试:随机读写(iops)和顺序吞吐(bw)。建议设置多条线程与不同的iodepth组合,例如:fio --name=randread --rw=randread --bs=4k --ioengine=libaio --iodepth=32 --numjobs=8 --size=10G。观察iostat和fio输出的latency、iops和bw,找到在可接受延时下的最大吞吐。
推荐采集主机层面指标(node_exporter/Prometheus)、应用层指标以及网络层traceroute/flow日志。使用Grafana做可视化,设置阈值报警(如95%延时、IOPS突增、softirq占比高)。结合ELK或Loki收集系统日志,便于追溯何时何种操作导致性能下降。
采用灰度落地:先在测试或单台实例验证参数(如BBR、调度器、mount参数),对比基线指标后逐步推广。任何涉及内核或磁盘挂载的改动都应准备回滚命令(如恢复原调度器:echo mq-deadline > /sys/block/sda/queue/scheduler)。维护变更日志与时间窗口,避免在高峰期冒然修改。
单靠系统层面调优有限,应用层也要优化:开启压缩/缓存、减少小文件写频率、合并IO请求、使用连接池和Keep-Alive减少握手开销。对数据库或日志,采用分区、读写分离或异步写入策略,能明显降低磁盘同步等待和网络往返。