JMeter
→ 返回运维工具
Apache JMeter 是开源负载与性能测试工具,可对 HTTP/HTTPS、JDBC、JMS、TCP 等目标施压,收集响应时间、吞吐量、错误率。与 JProfiler 联用:JMeter 负责复现负载,JProfiler 负责在 JVM 内定位 CPU / 线程 / JDBC / 内存热点。
适用场景
| 场景 | 说明 |
|---|---|
| 接口压测 | REST / GraphQL / 静态资源,看 TPS、P95/P99 |
| 容量规划 | 阶梯加压,找拐点与饱和区 |
| 回归对比 | 固定脚本 + 报告,版本间对比延迟与错误 |
| 配合剖析 | 施压同时 Attach JProfiler,用调用树关联慢请求 |
核心概念
| 概念 | 说明 |
|---|---|
| Test Plan | 顶层容器,内含线程组与监听器 |
| Thread Group | 虚拟用户数、Ramp-Up、循环/持续时间 |
| Sampler | 单次请求动作(如 HTTP Request) |
| Listener | 结果表、聚合报告、图形(生产压测慎用重型 Listener) |
| Timer | 思考时间、常量/随机延迟 |
| Assertion | 响应码、正文、耗时阈值 |
快速运行(GUI)
- 下载发行包,解压后执行
bin/jmeter.sh(macOS/Linux)或bin/jmeter.bat(Windows)。 - 添加 Thread Group → Add → Sampler → HTTP Request,填写协议、主机、路径、方法。
- 可选:HTTP Header Manager、Cookie Manager、CSV Data Set Config(参数化)。
- Add → Listener → Summary Report / Aggregate Report。
- 运行绿色启动按钮;大压测建议关闭多余 Listener 或使用非 GUI 模式。
非 GUI 模式(推荐用于正式压测)
jmeter -n -t test-plan.jmx -l results.jtl -e -o report-html/| 参数 | 含义 |
|---|---|
-n | 非 GUI |
-t | 测试计划 .jmx |
-l | 原始结果 .jtl |
-e -o | 测试结束后生成 HTML 报告目录 |
分布式压测可用 JMeter 分布式(master/slave),注意防火墙与时间同步。
与 JProfiler 的配合流程
- 在预发或专用压测环境启动被测 Java 应用,必要时在 JVM 参数中预留 JProfiler Agent 或使用 Attach(见 JProfiler)。
- JMeter 固定线程数与 Ramp-Up,先小流量预热,再升到目标 TPS。
- JProfiler 侧观察 CPU 采样调用树、JDBC 记录、线程历史;JMeter 侧对照 响应时间分布与错误率。
- 瓶颈可能在:热点方法、连接池、锁、N+1 SQL 或 GC——按 JProfiler 各章针对性优化后再跑同一 JMeter 脚本做对比。
常见问题(简)
- GUI 卡顿 / 内存暴涨:正式压测用
-n;减少实时图表 Listener。 - 压测机成为瓶颈:监控 JMeter 机 CPU/网络;使用分布式或加大机器规格。
- 结果不可复现:固定随机种子、关闭无关后台、对齐服务端线程池与连接池配置。