2. 压测工具选型:JMeter、Locust、wrk、k6、Vegeta 对比,工具安装与基础配置
在构建授权测试与 Kubernetes 资源限制调优场景库之前,选对压测工具是第一步。不同工具在协议支持、资源开销、脚本灵活性和分布式能力上差异显著。本节从五个主流工具的核心特性出发,给出选型依据,并演示基础安装与配置。
2.1 工具核心特性对比
下表从协议支持、并发模型、脚本语言、资源开销、分布式支持五个维度进行横向对比,帮助你在不同场景下快速决策。
| 工具 | 协议支持 | 并发模型 | 脚本语言 | 资源开销 | 分布式支持 |
|---|---|---|---|---|---|
| JMeter | HTTP/HTTPS、JDBC、JMS、gRPC(插件) | 线程池 | GUI 配置 + BeanShell/JSR223 | 较高(JVM 堆内存敏感) | 原生 Master-Slave |
| Locust | HTTP/HTTPS(核心)、gRPC(扩展) | 协程(gevent) | Python | 中等 | Master-Worker(HTTP 模式) |
| wrk | HTTP/HTTPS | 多线程 + epoll/kqueue | Lua(脚本化) | 极低 | 单机多核,无原生分布式 |
| k6 | HTTP/HTTPS、gRPC、WebSocket | Go 协程 | JavaScript(ES6) | 低 | k6-operator(Kubernetes) |
| Vegeta | HTTP/HTTPS | Go 协程 | 命令行 + JSON 配置 | 极低 | 无原生分布式,可配合 shell |
2.2 工具安装与基础配置
以下给出各工具在 Linux 环境下的标准安装方式及基础配置要点。所有命令均基于 Ubuntu 22.04 LTS 验证。
2.2.1 JMeter
JMeter 依赖 Java 运行环境,推荐使用 OpenJDK 17。
# 安装 OpenJDK 17
sudo apt update && sudo apt install -y openjdk-17-jdk
# 下载并解压 JMeter 5.6.3
wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.tgz
tar -xzf apache-jmeter-5.6.3.tgz -C /opt/
# 配置环境变量
echo 'export JMETER_HOME=/opt/apache-jmeter-5.6.3' >> ~/.bashrc
echo 'export PATH=$JMETER_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 验证安装
jmeter --version
基础配置: 修改 jmeter.properties 中的 language=en 为 zh_CN 可切换中文界面。压测前建议调整 JVM 堆内存:HEAP="-Xms4g -Xmx8g"。
2.2.2 Locust
Locust 通过 pip 安装,Python 版本需 ≥ 3.8。
# 创建虚拟环境(推荐)
python3 -m venv locust-env
source locust-env/bin/activate
# 安装 Locust
pip install locust
# 验证安装
locust --version
基础配置: 编写 locustfile.py 定义用户行为。启动时通过 --web-host 0.0.0.0 暴露 Web UI,--headless 模式用于无界面自动化。
2.2.3 wrk
wrk 需从源码编译,依赖 make 和 gcc。
# 安装编译依赖
sudo apt install -y build-essential libssl-dev
# 克隆并编译 wrk
git clone https://github.com/wg/wrk.git
cd wrk
make
# 将二进制复制到系统路径
sudo cp wrk /usr/local/bin/
# 验证安装
wrk --version
基础配置: wrk 通过命令行参数控制并发与时长,典型用法:wrk -t12 -c400 -d30s http://target。Lua 脚本用于自定义请求和响应处理。
2.2.4 k6
k6 官方提供 APT 仓库,安装简便。
# 添加 k6 官方仓库
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt update
# 安装 k6
sudo apt install -y k6
# 验证安装
k6 version
基础配置: k6 脚本使用 JavaScript,支持 __VU 和 __ITER 内置变量。通过 k6 run --vus 10 --duration 30s script.js 启动测试。环境变量可通过 -e MY_VAR=value 注入。
2.2.5 Vegeta
Vegeta 提供预编译二进制,下载即用。
# 下载最新版本(以 v12.11.1 为例)
wget https://github.com/tsenart/vegeta/releases/download/v12.11.1/vegeta_12.11.1_linux_amd64.tar.gz
tar -xzf vegeta_12.11.1_linux_amd64.tar.gz
# 移动到系统路径
sudo mv vegeta /usr/local/bin/
# 验证安装
vegeta --version
基础配置: Vegeta 采用管道式设计,典型用法:echo "GET http://target" | vegeta attack -rate=100 -duration=30s | vegeta report。支持 JSON 格式的目标文件,便于批量测试。
2.3 工具选型决策流程
以下 SVG 图展示了从场景需求到工具选择的决策路径,帮助你快速定位最适合当前任务的压测工具。
2.4 基础配置验证清单
完成安装后,建议执行以下快速验证,确保工具基础功能正常。
- JMeter: 启动 GUI 模式
jmeter,创建测试计划并添加 HTTP 请求默认值,运行一次空请求确认无异常。 - Locust: 使用官方示例
locust -f examples/basic.py --headless -u 1 -r 1 -t 5s,观察终端输出。 - wrk: 对本地服务执行
wrk -t2 -c10 -d5s http://127.0.0.1:8080,确认延迟和吞吐量数据可读。 - k6: 运行
k6 run --vus 1 --duration 5s github.com/grafana/k6/samples/http_get.js,检查报告输出。 - Vegeta: 执行
echo "GET http://127.0.0.1:8080" | vegeta attack -rate=10 -duration=5s | vegeta report,确认无错误。