第二章 性能分析工具:JMeter、wrk、ab、Locust 安装与基础使用
说到性能调优,手头没趁手的工具可不行。我个人习惯先把工具箱备齐,再开始压测,这样遇到问题才不会慌。这一章带你把四款主流工具装好、跑通,顺便聊聊我在项目中踩过的坑。
2.1 工具选型:什么时候用什么
你可能会问:四个工具,我全都要学吗?说白了,每个工具都有自己的脾气。我当年刚入门时,一口气全装了,后来发现项目场景不同,用的工具也完全不同。下面这张表格帮你快速对号入座:
| 工具 | 协议支持 | 脚本语言 | 适用场景 | 我最常用来做什么 |
|---|---|---|---|---|
| JMeter | HTTP / HTTPS / JDBC / gRPC 等 | Java / Groovy | 复杂业务压测、分布式场景 | 模拟用户登录流程、多接口联调 |
| wrk | HTTP / HTTPS | Lua(可选) | 纯接口吞吐量测试、长连接 | 压测上游网关,看 QPS 天花板 |
| ab (Apache Bench) | HTTP / HTTPS | 无 | 快速验证、简单 GET 请求 | 开发环境随手一测,确认服务是否正常 |
| Locust | HTTP / HTTPS / WebSocket 等 | Python | 需自定义用户行为、微服务集群 | 模拟真实用户打散请求,做容量规划 |
2.2 JMeter:图形化压测王者
JMeter 是我用得最多的工具,尤其是需要精细控制请求参数的场景。安装没什么难度,但有几个细节你一定要注意。
安装步骤
- 环境要求: JDK 8+,推荐 JDK 11(我遇到过 JDK 17 下某些插件不兼容的情况)。
- 下载: 从 Apache JMeter 官网下载二进制包(.zip 或 .tgz)。
- 解压,启动: Windows 双击
bin/jmeter.bat,Linux/macOS 运行bin/jmeter即可。
基础使用:一个简单的 HTTP 请求
打开 JMeter 后,先别被密密麻麻的按钮吓到。记住三步走:创建线程组、配置取样器、加监听器。我用一个例子说明:
# 1. 在测试计划上右键添加 -> 线程(用户) -> 线程组
# 设置线程数 10,Ramp-Up 时间 5 秒,循环次数 1
# 2. 在线程组上添加 -> 取样器 -> HTTP 请求
# 协议: https
# 服务器名称: api.example.com
# 路径: /health
# 3. 在线程组上添加 -> 监听器 -> 查看结果树
# 4. 点击绿色启动按钮,运行,查看结果树中的响应数据
实际业务压测时,我会加上HTTP 请求默认值来复用基础配置,再用正则表达式提取器从上一个请求中取 。这些技巧能省不少事,后面章节会细讲。
2.3 wrk:轻量级吞吐量神器
wrk 单机就能压出几十万 QPS,而且资源占用极低。我常拿它来测网关层性能,看能扛多少并发连接。
安装
Linux 上最简单:
# Ubuntu / Debian
sudo apt-get install build-essential libssl-dev git -y
git clone https://github.com/wg/wrk.git
cd wrk
make
# 然后拷贝到 /usr/local/bin 便于全局使用
sudo cp wrk /usr/local/bin/
macOS 直接用 Homebrew:brew install wrk。Windows 的话我建议用 WSL 2,原生支持更好。
基础使用
wrk 的命令行参数很简洁:
wrk -t12 -c400 -d30s http://localhost:8080/api/health
这条命令的意思是:12 个线程,保持 400 个并发连接,持续压 30 秒。输出结果会告诉你平均延迟、QPS、错误率等。我个人习惯先跑一轮 -t2 -c10 -d10s 看看服务是否稳定,再慢慢加压力。
2.4 ab (Apache Bench):简单粗暴
ab 是 Apache 自带的压测工具,小巧到连安装配置都不用操太多心。适合开发阶段随手验证服务是否跑得动。
安装
Ubuntu / Debian:sudo apt-get install apache2-utils。macOS 自带,或通过 brew 安装。Windows 可以从 Apache 官方站点下载 httpd 包,里面带 ab.exe。
基础使用
ab -n 10000 -c 100 https://localhost:443/api/v1/user/123
-n 是总请求数,-c 是并发数。结果里我最关心的是 Requests per second 和 Failed requests。有一次我在本地压测时发现大量连接超时,结果检查发现是笔记本的 ulimit 限制了文件句柄数。用 ab 前一定要把系统限制调大,不然结果会误导你。
-H 参数加一行,但多个 header 就得写多次 -H,比较啰嗦。
2.5 Locust:Python 驱动的用户模拟器
Locust 允许你用 Python 代码定义用户行为,非常适合模拟复杂的业务场景。而且它自带的 Web 界面能看到在线用户数和实时响应时间,很直观。
安装
pip install locust
安装完后运行 locust --help 验证。我建议在 Python 虚拟环境里安装,避免全局包冲突。
基础使用:写一个最简单的 locustfile.py
from locust import HttpUser, task, between
class WebsiteUser(HttpUser):
wait_time = between(1, 5) # 用户等待时间 1~5 秒
@task
def view_home(self):
self.client.get("/hello")
在终端运行:locust -f locustfile.py --host=https://api.example.com。然后打开浏览器访问 http://localhost:8089,你会看到 Web 控制台。填写总用户数和 spawn rate(孵化速率),点击 “Start swarming” 就开始压测了。你想想看,实时图表里 QPS 曲线抖动或者出现毛刺,那基本上就是性能瓶颈的信号。
2.6 四款工具对比小结
通过上面这些安装和基础例子,你应该对它们有了直观感受。我再把核心差异整理成结构图,方便复习:
这张图把每款工具的核心特点标出来了。实际选型时,你可以按这个流程来:先看需要测什么协议,再看是否要有脚本逻辑,最后考虑并发规模。工具选对了,调试过程能少走很多弯路。
2.7 给你的建议
- 安装后立刻验证: 每个工具装完,跑一个最简单的请求确认能通。我见过不少同事装完 wrk 就打错端口,折腾半天才发现。
- 注意系统限制: Linux 上记得调大文件句柄数(
ulimit -n 65535),否则压测还没开始就报错。 - 别贪多: 新手可以先精通 JMeter 和 wrk 两个,其他两个知道怎么装怎么跑就行。用到的时候再深入研究不迟。
这一章的工具安装和使用只是起点。后面我们会用它们真正发掘 SDK 的性能瓶颈。先把环境搭好,后面就顺手多了。