1200 字
约 4 分钟
8
S16-X02 · JMeter 与压测入门(附录)

适用读者:第一次要给自己接口"打一枪"看能扛多少的人。
前置:S16-B01(测试层次)、S16-J01(链路追踪)。
覆盖旧文:4579(JMeter 入门教程:介绍、设置中文与基础使用,3,390 字符)、2946(性能测试入门:从概念到压测工具,2,158 字符)。
扩展点:E-S16-041(压测四指标与"别测缓存命中率")、E-S16-042(结论可信的五个前提)。
下一篇:S16 系列验收(v3)。


1. 一句话结论

压测不是"跑个脚本看 TPS",而是控制变量去回答一个具体问题:在什么负载、什么数据量、什么缓存状态下,P95 延迟是多少、瓶颈在哪。没有明确问题的压测,结果一定被误读。

出处:A-4579、A-2946。


2. 最小可运行(JMeter 5.6 口径)

环境:JMeter 5.6.3 + JDK 17(GUI 只用于编排,压测用 CLI)
① 新建 Thread Group:Threads=50, Ramp-up=10s, Loop=100
② 加 HTTP Request:协议 http,域名 127.0.0.1,端口 8080,路径 /api/items?page=1
③ 加 HTTP Header Manager:Content-Type: application/json
④ 加监听器(调试用):View Results Tree(压测时关掉,极耗资源)
⑤ CLI 运行:
   jmeter -n -t plan.jmx -l result.jtl -e -o report/
   预期:report/index.html 生成,含 Throughput、P95、Error%

中文化(原文覆盖):Options → Choose Language → Chinese (Simplified);仅影响界面,不影响脚本。

判据:"GUI 编排、CLI 执行"——GUI 会吃内存与 CPU,压测结果不可信(原文同样强调)。


3. 压测四指标(E-S16-041)

指标 含义 判据
Throughput(TPS/RPS) 每秒完成请求数 与并发数一起看,单看无意义
P95 / P99 延迟 尾部延迟 平均值会掩盖长尾,必须看 P95
Error% 失败率 超阈值(如 0.1%)时结果作废
资源水位 CPU / 内存 / 连接数 / IO 定位瓶颈:CPU 满 = 计算瓶颈;连接满 = 池太小

"别测缓存命中率":冷缓存与热缓存的 TPS 可能差 10 倍。判据:"压测必须先声明缓存状态,并分别测冷/热两条曲线"。


4. 结论可信的五个前提(E-S16-042)

① 数据量接近生产(1 万行与 1000 万行的 SQL 计划完全不同)
② 压测机与被测机分离(否则 JMeter 抢 CPU)
③ 网络位置接近真实(本机 127.0.0.1 测不出网络与 TLS 成本)
④ 关闭调试日志与监听器
⑤ 至少跑 3 轮,看方差;单轮数字不算结论

判据:"压测结论的强度 = 最弱的那条前提"——数据量不对,后面的调优全是误判。

常见误读:

误读 真相
"TPS 到 500 就上不去了" 可能是连接池 20 × 单请求 40 ms 的数学结果
"加线程就加 TPS" 到拐点后加线程只加延迟与错误
"P95 高是代码慢" 也可能是 GC、锁竞争、下游超时重传

5. 与其他工具的分工

工具 适合
JMeter 协议级压测、脚本化、报告完整
wrk / hey 单接口快速摸底
Gatling 代码化压测(Scala/Java DSL)
k6 JS 脚本 + CI 集成

判据:"先 hey/wrk 摸底,再 JMeter 出报告"——摸底十秒出结果,报告用于归档与对比。


6. 反例:六种"压测白做"

做法 后果
GUI 里开着监听器压测 结果被人为压低
用 1 万行数据测出结论 上生产即雪崩
只报平均值 长尾失败不可见
压测机与被测机同机 资源争抢,数字无意义
不声明缓存状态 冷热混测,无法复现
单轮即结论 方差当能力

7. 自测

  1. 压测四指标?为什么必须看 P95?
  2. 为什么"别测缓存命中率"?该怎么测?
  3. 结论可信的五个前提?
  4. "TPS 上不去"最容易被误判成什么?实际可能是什么?
答案
  1. 吞吐、P95/P99、错误率、资源水位;平均值掩盖长尾。
  2. 冷热差可达十倍;分冷/热两条曲线各自声明。
  3. 数据量、机器分离、网络位置、关监听器、多轮看方差。
  4. 误判为"代码性能上限";实际可能是池大小 × 单请求耗时的乘积上限。

8. 下一篇

S16 系列验收(v3)。


本篇属于系列《S16 · 测试与可观测性》。旧文来源:A-4579/2946;扩展点 E-S16-041/042。JMeter 版本行为以官方文档为准(待核)。

S16-X02 · JMeter 与压测入门(附录)
https://www.clxhxhhr.top/posts/5417/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。