用 AI 跑压测:从写脚本到出容量结论

AI 在压测里最值钱的用法是帮你把口径问清楚、写脚本骨架、把可疑指标列全;最不值钱的是让它告诉你结果。这篇记录了阶梯加压找拐点、压测机自己成瓶颈、以及报告里必须补的三节。

这个月给一个接口做压测,从"完全不知道从哪下手"到交出一份能用的容量结论,AI 帮了大忙——但它也差点把我带进沟里两次。这篇是完整实录。

一、先把口径定死,再动手

压测最容易出的问题是"压了但没人认"。所以我第一件事不是装工具,而是把下面这段发给 AI,让它帮我确认口径:

我要压一个 POST 接口,目标是:8 核机器上单实例在 500 并发下满足 P99 ≤ 200ms、错误率 < 0.1%。请指出我这个目标里有哪些定义不清的地方。

它挑出来四个:并发是指并发连接还是并发请求、P99 是否含超时请求、错误率是否包含限流返回的 429、以及"8 核机器"是压测机还是被压机。

这四个问题我原本一个都没写清楚。先花十分钟对齐口径,比压完发现数据没法用强得多。

二、让它生成脚本,但别信它给的参数

我让它用 wrk 和 k6 各写一版脚本。它给我的第一版里有这么一段:

-- AI 生成的 wrk 脚本(第一版,有幻觉参数)
wrk.method = "POST"
wrk.body = '{"page":1,"size":20}'
wrk.headers["Content-Type"] = "application/json"
wrk.timeout = 2000            -- ⚠️ 这个参数 wrk 根本没有
wrk.rate = 300                -- ⚠️ 也没有

wrk.timeout 和 wrk.rate 是它编的——wrk 的脚本变量只有 method / body / headers / path。我因为不熟这个工具,差点直接用。

后来我改了问法:

只使用 wrk 官方脚本支持的内置变量,不确定的不要写;如果某个能力 wrk 做不到(比如按固定 QPS 发压),直接告诉我换工具。

它这次老实了,并主动建议:「固定速率用 k6 的 constant-arrival-rate 更合适」。

经验:AI 对压测工具的 CLI 参数和脚本变量记忆非常不可靠。凡是参数,一律去官方文档或 --help 核一遍(wrk --help 只要两秒)。

三、压测机自己先成了瓶颈

第一轮结果很难看:QPS 卡在 1200 上不去,P99 飙到 800ms。我以为是服务端问题,把结果连同 top 输出一起丢给 AI,它先问了一句:

被压机和压测机分别是什么配置?压测机的 CPU steal 和上下文切换是多少?

一查,压测机和被压机在同一台机器上,而且 wrk 已经吃满 4 个核。也就是说,我测的大半是"自己打自己"。

分开机器重压之后,QPS 直接到 4200,P99 掉到 130ms。这是这次最大的一个坑,也是 AI 唯一一次救了我而不是坑我。

四、阶梯加压找拐点

固定并发压一次只能得到一个点。让 AI 生成一条阶梯加压的场景表后,我做成了这样一张表(简化):

并发QPSP99错误率被压机 CPU
100185042ms0%22%
3004100118ms0%55%
5004350190ms0.02%78%
8004380720ms1.4%96%
120044002100ms6.8%99%

拐点在 500~800 之间:QPS 不再涨,延迟开始暴涨——典型的排队现象。这个判断我没有让 AI 拍,而是让它解释"为什么 QPS 到 4400 就上不去了",它给的候选是 CPU 饱和、连接池、GC、锁竞争,并列出各自该看什么指标。我按这个清单去查,最后落在数据库连接池(max_open_conns 只有 20)。

五、报告:结论要能被别人拿去用

最后让 AI 帮我起了一版报告初稿,我改了三处:

  1. 加了"测试环境"整节(机器规格、网络、数据量、是否预热)——它默认不写,但没有这节结论就没有意义;
  2. 把"平均延迟"全部换成分位——它初稿里写的是 avg,那玩意儿在压测里几乎没有信息量;
  3. 补了风险与不确定性:"本次未测尖峰场景""数据库为单实例,未验证主从延迟影响"。

最终结论写成了一句可以直接用的话:

单实例(8C16G,连接池 20)在 500 并发下支撑 4300 QPS,P99 190ms;瓶颈为数据库连接池。按峰值 12000 QPS 估算,需 3 个实例并留 30% 冗余(4 台)。

六、这次学到的三条

  • 参数不信 AI,口径要先定:工具参数、配置项一律核对官方文档;
  • 先排除压测机自身:CPU、网络、端口耗尽、CPU steal,四样先看一遍;
  • 结论必须带环境与不确定性:否则数字好看但没人敢用。

小结

AI 在压测这件事上最值钱的三个用法是:帮你把口径问清楚、帮你写脚本骨架、帮你把可疑指标列全。最不值钱的是:让它告诉你"应该是什么结果"——结果只能压出来。至于参数和命令,把它当草稿,自己核一遍再跑。

返回博客列表