在 Ubuntu 上使用 JMeter 进行性能测试
一 环境准备与安装
- 安装 Java 11(JMeter 5.x 推荐):sudo apt update && sudo apt install openjdk-11-jdk;验证:java -version。
- 下载并解压 Apache JMeter(示例为 5.5):
wget https://downloads.apache.org/jmeter/binaries/apache-jmeter-5.5.zip
unzip apache-jmeter-5.5.zip
- 可选:配置环境变量(便于全局执行)
echo ‘export PATH=$PATH:/opt/jmeter/bin’ >> ~/.bashrc && source ~/.bashrc
jmeter -v 应显示版本号。
- 说明:JMeter 为 Java 应用,需先安装 JDK;也可使用其他已安装的 JDK 版本(如 8/11/17),以 java -version 输出为准。
二 编写测试脚本
- 在本地 GUI 创建测试计划并保存为 .jmx:
- 添加线程组:设置 Number of Threads(并发数)、Ramp-Up Period(启动时间)、Loop Count(循环次数)。
- 添加取样器:如 HTTP Request(配置协议、域名/IP、端口、路径、方法、参数/Body)。
- 添加断言:如 Response Assertion 或 JSON Assertion(校验状态码/业务字段)。
- 添加监听器:如 View Results Tree(调试用)、Summary Report/Aggregate Report(统计用)。
- 参数化:使用 CSV Data Set Config 读取测试数据,变量在请求中以 ${变量名} 引用。
- 关联:使用 Regular Expression Extractor 或 JSON Extractor 从前置响应提取变量供后续请求使用。
- 将 .jmx 脚本上传至 Ubuntu 服务器(如 /opt/jmeter/projects/test.jmx)。
三 非 GUI 执行与报告
- 基本命令(非 GUI、生成 CSV 结果):
jmeter -n -t /opt/jmeter/projects/test.jmx -l /opt/jmeter/results/test.jtl
- 生成 HTML 报告(需先有结果文件):
jmeter -g /opt/jmeter/results/test.jtl -e -o /opt/jmeter/reports/test-report
- 一步执行并生成报告(非 GUI):
jmeter -n -t /opt/jmeter/projects/test.jmx -l /opt/jmeter/results/test.jtl -e -o /opt/jmeter/reports/test-report
- 长时间运行建议使用 nohup 并记录日志:
nohup jmeter -n -t /opt/jmeter/projects/test.jmx -l /opt/jmeter/results/test-$(date +%F-%T).jtl -e -o /opt/jmeter/reports/test-report-$(date +%F-%T) &
- 说明:-n 非 GUI、-t 指定脚本、-l 结果文件(CSV/JTL)、-e 生成报告、-o 报告输出目录(必须为空)。
四 分布式压测
- 角色说明:Controller(控制机,下发测试)与 Workers(压力机,执行请求)。
- 在所有 Worker 上启动服务(建议指定本机非回环 IP 与端口):
/opt/jmeter/bin/jmeter-server -Dserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=192.168.50.60 -Dserver_port=1984
- 在 Controller 上执行(指定 Worker 列表):
/opt/jmeter/bin/jmeter -n -t projects/test.jmx -l results/test.csv -e -o reports/test-report \
-Dserver.rmi.ssl.disable=true -R 192.168.50.171:1984,192.168.50.60:1984
- 常见问题:未设置 java.rmi.server.hostname 可能导致 “Cannot start. ubuntu is a loopback address.”;Worker 默认 RMI 端口 1099 可自定义(如 1984),需确保防火墙放行相关端口。
五 结果分析与注意事项
- 关键指标:Throughput(吞吐量,req/s)、Average(平均响应时间)、90%/95%/99% Line(分位响应时间)、Error%(错误率);优先用 Summary/Aggregate Report 分析,非调试时禁用 View Results Tree 以免压测机资源被占用。
- 脚本规范:每个取样器建议配置断言;合理使用定时器模拟用户思考时间;参数化与关联保证场景真实性;避免在测试计划中使用过多监听器。
- 压测机资源:单机并发不宜过高(经验值不超过 50 线程/机,视硬件与目标系统而定);必要时采用分布式扩展压力。