3、性能分析工具安装与配置:JMeter、Postman、wrk、arthas
工具选对,优化不累。我记得刚带团队那会,大伙儿手上工具五花八门——有人用浏览器F12,有人写脚本,有人干脆靠拍脑袋猜。结果呢?延迟问题复盘时,数据口径对不上,谁都不认账。所以这一章,咱们把几款主流工具从安装到基础用法捋一遍。我个人习惯是桌面上常备JMeter、Postman、wrk和Arthas,覆盖压测、接口调试、服务端诊断三个层面。
3.1 JMeter —— 压测界的瑞士军刀
JMeter是Apache基金会的老牌压测工具,纯Java实现。说白了,它能模拟成千上万个用户同时打你的接口,看系统扛不扛得住。
3.1.1 安装
- 从官网下载二进制包(
apache-jmeter-*.zip),解压即可。不需要安装程序。 - 确保系统已装JDK 8+,并配置好
JAVA_HOME环境变量。 - 进入
bin/目录,Windows双击jmeter.bat,Linux/Mac执行sh jmeter.sh。
3.1.2 基础使用(压测一个GET接口)
- 右键"测试计划" → "添加" → "线程(用户)" → "线程组"。设置线程数(比如100)、Ramp-Up时间(比如10秒)、循环次数。
- 右键线程组 → "添加" → "取样器" → "HTTP请求"。填写协议、服务器IP、端口、路径。
- 右键线程组 → "添加" → "监听器" → "聚合报告"。
- 点击绿色三角按钮运行,聚合报告里看平均响应时间、吞吐量、90%/99%百分位。
# 无GUI模式压测(推荐线上用)
jmeter -n -t test.jmx -l result.jtl -e -o report/
# -n:非GUI模式,-t:脚本路径,-l:结果文件,-e -o:生成HTML报告
-Jthreads=200这样的参数覆盖JMeter属性,同一份脚本跑不同场景,不用改文件。
3.2 Postman —— 接口调试第一站
Postman不只是个"请求发送器"。它的Collection Runner、Pre-request Script、Tests功能在做接口延迟基线测试时特别有用。
3.2.1 安装
从官网下载安装包,一路next。Windows/Mac/Linux全平台支持。也可以装Postman的CLI工具Newman,用于CI/CD集成。
3.2.2 基础使用
- 新建Request,填上URL、Headers、Body,点击Send。下方会显示Status Code、Response Time、Size。
- 批量测试:把多个请求保存到Collection里,点击Runner → 选择Collection → 设置迭代次数和延迟 → Run。
- 查看每个请求的响应时间图表(Runner结果页面有可视化的时间线)。
// Pre-request Script示例:动态时间戳
pm.variables.set("timestamp", Date.now());
3.3 wrk —— 轻量级高并发利器
wrk是用C语言写的,基于epoll/kqueue事件驱动。它不依赖Java,资源占用极低,单机就能压出十万级连接。你想想看,JMeter开300线程可能已经吃2G内存了,wrk用几十MB能打出10万QPS。
3.3.1 安装
# Mac
brew install wrk
# Linux(需编译)
sudo apt install build-essential libssl-dev git
git clone https://github.com/wg/wrk.git
cd wrk && make
sudo cp wrk /usr/local/bin/
为什么我不直接推荐apt安装?因为我曾在Ubuntu 20.04上遇到apt源的wrk版本过旧,不支持Lua脚本扩展。编译安装能拿到最新版。
3.3.2 基础使用
# 压测GET接口 30秒,12个连接,4个线程
wrk -t4 -c12 -d30s http://192.168.1.100:8080/api/v1/users
# 添加Headers
wrk -t2 -c10 -d10s -H "Authorization: Bearer token123" http://example.com/api
# 分阶段压测(使用Lua脚本)
wrk -t2 -c10 -d30s -s stage.lua http://example.com/api
输出结果中的Latency、Req/Sec、Non-2xx or 3xx是核心指标。我个人习惯先观察Avg、Stdev和Max,Max如果比Avg高一个数量级,说明有长尾延时。
--latency参数,它会显示百分位延迟。
3.4 Arthas —— Java应用在线诊断神器
Arthas是阿里巴巴开源的Java诊断工具。它能attach到正在运行的JVM,实时查看方法调用耗时、线程堆栈、GC情况,而无需重启应用。我在项目里排查接口延迟的时候,最常用的就是Arthas的trace命令——它能告诉你一个接口到底慢在哪个方法。
3.4.1 安装
# 一行命令启动(推荐)
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
# 或者用特定PID
java -jar arthas-boot.jar 12345
启动后选择你要诊断的Java进程序号,回车,就进入Arthas控制台了。
3.4.2 基础使用
| 命令 | 作用 | 示例 |
|---|---|---|
| dashboard | 显示实时线程、内存、GC信息 | dashboard -i 2000(每2秒刷新) |
| thread | 查看线程栈,定位死锁或阻塞 | thread -b(找出阻塞的线程) |
| trace | 跟踪方法调用链,计算每个子调用的耗时 | trace com.example.service.UserService getUserById |
| monitor | 监控方法调用次数、成功/失败、平均耗时 | monitor -c 5 com.example.controller.UserController * |
| ognl | 在线执行表达式,查看运行时的变量取值 | ognl '@java.lang.System@getProperty("user.name")' |
trace命令发现UserService.getUserById调用了两次数据库——一次查用户信息,一次查用户扩展。而业务上只需要一次联表查询。找到根因后,优化SQL,延迟回到120ms。
3.5 工具选型对照
四款工具各有侧重。我列个表,方便你按场景选。
| 工具 | 定位 | 适用场景 | 学习成本 |
|---|---|---|---|
| JMeter | 全功能压测平台 | 复杂场景压测、分布式压测、图形报告 | 中 |
| Postman | 接口调试与协作 | 单接口验证、自动化测试、监控基线 | 低 |
| wrk | 轻量级压测 | 高并发微服务压测、脚本化压测、CI集成 | 低 |
| Arthas | 在线诊断 | 生产环境定位慢方法、线程阻塞、内存泄漏 | 中高 |
我个人习惯:前期接口功能性验证用Postman;全链路压测用JMeter配合分布式Agent;压测过程发现异常"长尾",立刻登录服务器用wrk复现+Arthas trace定位代码级瓶颈。这几把刀各司其职,缺哪个都不顺手。