压测 QPS 到 6000 就不再涨,服务端 CPU 40%,压测机 8 核全部 80% 以上,load 到 12。JMeter 日志里开始出现 Non HTTP response code: java.net.SocketTimeoutException。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

jmeter -n -t plan.jmx -l result.jtl -e -o report
top -b -n1 | head -15
ss -s | grep -i timewait

压测工具本身要序列化请求、解析响应、记结果,单机线程一多就先顶不住。压测机的网卡和临时端口也在同一时间见底。服务端还没到瓶颈,测出来的曲线是客户端的天花板。这一点先确认清楚,后面就不用反复试。

碰到「压测机瓶颈」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,先看压测机的 CPU 和网络 别只盯服务端;结果写入改成 CSV 精简字段 关掉 GUI 和树形结果;多台压测机分布式发压 每台控制在 60% 以下;用固定 500 并发跑两轮 确认结果可重复。

改完照着核一遍,分布式压测下 QPS 继续上升,压测机 CPU 保持在 60% 以下。

作者 9823189