Ubuntu JMeter如何进行压力测试
小樊
36
2025-12-16 16:02:34
Ubuntu 上使用 JMeter 进行压力测试
一 环境准备与安装
安装 Java 11 (JMeter 5.x 建议使用 JDK 8/11):sudo apt update && sudo apt install -y openjdk-11-jdk ;验证:java -version。
下载并解压 Apache JMeter (不要使用 apt 安装旧版):
wget https://dlcdn.apache.org/jmeter/binaries/apache-jmeter-5.6.3 .tgz
tar -xzf apache-jmeter-5.6.3.tgz && sudo mv apache-jmeter-5.6.3 /opt/jmeter
配置环境变量(写入 ~/.bashrc 或 /etc/profile):
export JMETER_HOME=/opt/jmeter
export PATH=$JMETER_HOME/bin:$PATH
生效:source ~/.bashrc
验证安装:jmeter -v(应输出版本号,如 5.6.3 )。
二 编写测试计划
启动 GUI 设计器:jmeter(仅用于调试与脚本编写,正式压测请用非 GUI)。
新建测试计划 → 添加线程组(Thread Group):设置 Number of Threads(并发数) 、Ramp-Up Period(秒) 、Loop Count(循环次数) 。
在线程组下添加 HTTP 请求 (HTTP Request):配置协议、服务器名称/IP、端口、路径、请求方法、参数或 Body Data (JSON 等)。
添加 HTTP Header Manager (如 Content-Type: application/json)。
添加 断言 (Response Assertion / JSON Assertion)校验业务正确性(如状态码 200 或 JSON 字段)。
添加监听器:
View Results Tree (仅调试,正式压测关闭,避免内存占用);
Summary Report 、Aggregate Report 用于统计。
保存为 .jmx 脚本,后续用命令行执行。
三 执行压测与结果查看
非 GUI 执行(推荐):
jmeter -n -t test_plan.jmx -l result.jtl -e -o report/
说明:-n 非 GUI;-t 脚本;-l 结果文件;-e 生成 HTML 报告;-o 报告输出目录(需为空)。
多次运行取平均(示例:并发从 100 到 1000 ,步长 100 ,每档 10 次):
for threadCount in $(seq 100 100 1000); do
for i in {1…10}; do
./jmeter.sh -n -t test.jmx -J threadNum=$threadCount -l testcsv/test$threadCount-$i.csv -e -o testReport/test$threadCount-$i/;
sleep 1;
done;
done
结果分析:
HTML 报告位于 report/ ,可查看 Throughput(吞吐量,/s) 、Average(平均响应时间) 、Error % 等;
若数据量大,可直接读取报告目录下的 statistics.json ,取 Total 对象的 throughput 字段用于对比。
四 分布式压测与常见问题
何时使用分布式:单机并发过高导致 JMeter 卡死/内存溢出 时,使用分布式将负载分发到多台执行机。
架构与前提:
控制机 (Client)分发脚本与汇总结果;执行机 (Agents/Slaves)实际发压;
所有机器安装相同版本的 Java 与 JMeter ;
网络互通,放通 RMI 1099 端口及高端口范围(如 4000–5000 ),或临时关闭防火墙;
控制机与执行机建议都设置:server.rmi.ssl.disable=true (禁用 SSL,避免连接问题)。
执行机配置:
编辑 $JMETER_HOME/bin/jmeter.properties :server.rmi.ssl.disable=true;必要时设置 java.rmi.server.hostname=执行机IP ;
启动:./jmeter-server -Djava.rmi.server.hostname=执行机IP(后台:nohup … > jmeter-server.log 2>&1 &)。
控制机配置与运行:
编辑 $JMETER_HOME/bin/jmeter.properties :remote_hosts=192.168.1.101:1099,192.168.1.102:1099 ;
分发脚本及依赖(如 CSV 数据文件、JAR )到所有执行机的相同路径 ;
命令行运行:./jmeter -n -t plan.jmx -r -l result.jtl (-r 远程启动所有执行机)。
常见问题排查:
无法连接执行机:检查 1099 端口连通性、hostname 解析、以及 server.rmi.ssl.disable 是否一致;
执行机日志出现 “Created remote object …” 即表示监听成功;
调整执行机堆内存(编辑 jmeter 脚本中的 HEAP=“-Xms2g -Xmx4g”)。