1.
准备工作与测试原则
准备环境:A. 确认测试范围(同机房、跨台北/高雄机房、公网)。B. 选择专用测试实例(避免与生产同机)。C. 固定测试时间窗口并记录网络拓扑与IP/MAC。D. 关闭不必要服务与大流量任务以减小噪音。
小技巧:为复现性建立脚本化流程,使用时钟同步(ntp或chrony)。
2.
基础连通性与延迟测量
步骤:A. 使用 ping 测量往返时延和丢包:ping -c 100 -i 0.2 -s 64 目标IP,观察rtt min/avg/max/mdev与丢包率。B. 使用 traceroute/traceroute -n 或 tcptraceroute 定位跳点延时。C. 持续跟踪用 mtr -r -c 100 目标IP,保存报告用于比对。
判读:如果第一跳延迟高或丢包,优先排查宿主机或VPC网段配置。
3.
带宽吞吐基准(TCP/UDP)
工具与命令:A. iperf3:在Server端运行 iperf3 -s;Client端运行 iperf3 -c SERVER_IP -P 8 -t 60(并发8流,60秒)。B. UDP测试:iperf3 -c SERVER_IP -u -b 1000M -t 60 -P 4。C. 记录带宽、丢包、抖动等。
注意:在云环境测试不同实例大小与AZ组合,比较同机房内与跨机房失真。
4.
HTTP/应用层压测
步骤:A. 部署目标HTTP服务(可用简单nginx/keep-alive配置)。B. 使用 wrk:wrk -t4 -c200 -d60s http://SERVER/。C. 测试TLS:启用HTTPS再跑一次,注意CPU与TLS握手开销。D. 比较Keep-Alive开关、连接池大小、并发连接与响应时间分位数(P50/P95/P99)。
输出评估:响应时间分布与错误率是判断应用层瓶颈关键。
5.
磁盘与IO性能测试
工具与命令:A. fio 测试随机/顺序读写:fio --name=randrw --rw=randrw --bs=4k --ioengine=libaio --iodepth=32 --numjobs=4 --size=2G --runtime=60 --group_reporting。B. 顺序写 dd 测试:dd if=/dev/zero of=/tmp/testfile bs=1M count=1024 oflag=direct。
注意:云盘类型(本地SSD vs 网络盘)影响显著,测试前确认缓存/写回策略。
6.
CPU 与内核资源压力测试
步骤:A. sysbench CPU:sysbench --test=cpu --cpu-max-prime=20000 run,测算每秒事件。B. memory test:sysbench --test=memory run。C. 使用 stress-ng 施加混合压力,观察上下文切换与中断。
结合 perf/top/sar 分析系统层面瓶颈(CPU steal、iowait、softirq)。
7.
抓包与深度分析
流程:A. 使用 tcpdump -i any host SERVER_IP -w capture.pcap 捕获包(限定时间/大小)。B. 使用 Wireshark 或 tshark 分析TCP重传、延迟分段、MSS/窗口缩放问题。C. 分析SYN/ACK时间与重试次数来定位网络丢包或中间设备丢弃。
提示:在机房内若见大量中间设备重传,需联系机房网管排查交换机或链路问题。
8.
内核与网络参数调优(步骤化)
步骤一:临时调整并测试:sudo sysctl -w net.core.rmem_max=134217728; sudo sysctl -w net.core.wmem_max=134217728; sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 134217728"; sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 134217728".步骤二:切换拥塞算法:sudo sysctl -w net.ipv4.tcp_congestion_control=bbr(需内核支持)。步骤三:持久化:将上述键值写入 /etc/sysctl.d/99-network.conf 并 sysctl --system。
验证:重跑 iperf3/wrk 看吞吐是否提升,并用 ss -s 查看TCP状态。
9.
网卡、驱动与中断优化
步骤:A. 查看网卡信息 ethtool eth0,检查offload(GRO, GSO, TSO)状态。B. 视情况开启/关闭 offload:ethtool -K eth0 tso on gso on gro on。C. 检查中断均衡:cat /proc/interrupts,使用 irqbalance 或手动调 core_affinity(echo 2 > /proc/irq/XX/smp_affinity)。D. 如有支持,启用Jumbo Frame(ip link set dev eth0 mtu 9000)并在交换机侧一致配置。
注意:修改前后需验证丢包与延迟变化。
10.
应用层优化与连接管理
实践项:A. 配置应用连接池与长连接(DB/HTTP),避免频繁三次握手。B. 在Web服务器增加 keepalive_timeout 与 worker_connections 调优(nginx: worker_processes auto; worker_connections 10240; keepalive_timeout 60;)。C. 在高并发场景使用反向代理/负载均衡并开启健康检查以避免单点饱和。
建议:逐项变更并回归测试,确保性能提升且无资源泄漏。
11.
监控与自动化测试流程
实施:A. 部署 Prometheus + node_exporter + cAdvisor + Grafana,记录网络/磁盘/CPU/内存指标与自定义测试指标。B. 使用 CI/CD 或 cron 设定定期基准(每日/每周)并存储历史数据以判断回归。C. 把测试脚本容器化(Docker),在不同机房重复执行。
好处:可快速定位回归时间点与原因。
12.
结果判读与优化决策清单
判读步骤:A. 若延迟稳定偏高,优先检查链路级(第一跳/交换机)与宿主网络。B. 若带宽不足,用 iperf3 看是否受限于实例规格或虚拟化带宽上限。C. 若应用响应慢但网络正常,聚焦CPU/TLS/磁盘IO。D. 建议列表:内核窗口、拥塞算法、网卡offload、MTU、应用连接数、实例规格升级、机房间链路调整。
实践原则:每次改动量化并回溯对比。
13.
常见问题 Q&A — 问:台湾本地云机房测到的高延迟常见原因是什么?
答:常见原因包括:租用实例被限制带宽或有burst限制;虚拟化层(宿主机)网络拥塞;跨机房路由绕行或链路质量问题;网卡驱动/中断配置不佳;应用层握手或TLS开销过高。建议按链路→主机→应用顺序排查并先用 ping/mtr/iperf3 定位。
14.
常见问题 Q&A — 问:调整哪些 sysctl 参数能最快看到改进?
答:通常调整 net.core.rmem_max/wmem_max 与 net.ipv4.tcp_rmem/tcp_wmem 增大接收/发送缓冲、启用窗口缩放和切换到 bbr 拥塞控制(内核支持下)对吞吐与延迟抖动改善明显。记得持久化并回归测试以免引入副作用。
15.
常见问题 Q&A — 问:如何在机房层面与云厂商沟通以解决不可见链路问题?
答:准备好:A. mtr/traceroute 与 ping 的时间序列报告B. tcpdump 抓包显示重传或丢包C. iperf3 同点对点吞吐记录D. 说明受影响时间窗口与业务影响等级。将这些证据提供给云厂商/机房网管,请求他们检查交换机队列、链路负载与中间路由设备。
来源:台湾本地云服务器机房 性能基准测试与延迟优化实务