Ubuntu JMeter如何进行分布式测试
小樊
34
2025-12-16 16:03:39
Ubuntu 上搭建 JMeter 分布式压测
一 架构与前提
- 架构说明:由一台控制机 Controller/Master负责下发测试计划与汇总结果,多台执行机 Worker/Agent运行 jmeter-server 产生实际负载,通信基于 RMI,默认端口为 1099。控制机也可同时作为执行机参与压测。为减少连通性问题,实验或内网环境常将 server.rmi.ssl.disable=true。
- 版本与环境:所有节点建议使用相同版本的 Java(推荐 OpenJDK 11) 与 JMeter(建议 5.6.x),避免因版本不一致导致兼容性问题。Ubuntu 上不建议使用系统仓库的老版本 JMeter(如 2.13)。
- 网络与端口:确保节点间网络互通,开放 1099 及 RMI 通信所需的高端口范围(如 4000–5000);控制机可先通过 ping 与 telnet 验证到各执行机的 1099 连通性。
二 在 Ubuntu 上安装与准备
- 安装 Java 与 JMeter(每台机器)
- 安装 JDK:sudo apt update && sudo apt install -y openjdk-11-jdk
- 下载并解压 JMeter(示例为 5.6.2):
- wget https://dlcdn.apache.org/jmeter/binaries/apache-jmeter-5.6.2.tgz
- tar -xzf apache-jmeter-5.6.2.tgz && cd apache-jmeter-5.6.2
- 建议将 $JMETER_HOME/bin 加入 PATH,便于执行 jmeter/jmeter-server。
- 重要提醒
- 不要使用 apt 安装 JMeter(版本过旧,常见为 2.13,加载新版 .jmx 可能报错)。
- 控制机与所有执行机的 JMeter 版本与插件保持一致,避免运行期不兼容。
三 配置执行机 Worker
- 修改配置($JMETER_HOME/bin/jmeter.properties)
- 禁用 RMI SSL(便于内网连通):server.rmi.ssl.disable=true
- 如需自定义端口,设置:server_port=自定义端口(默认 1099)
- 多网卡或 DNS 解析异常时,显式指定本机 IP:java.rmi.server.hostname=执行机IP
- 启动执行机
- 前台:./jmeter-server -Djava.rmi.server.hostname=执行机IP
- 后台:nohup ./jmeter-server -Djava.rmi.server.hostname=执行机IP > jmeter-server.log 2>&1 &
- 成功标志日志包含:Created remote object: UnicastServerRef…
- 端口与多实例
- 默认 server_port=1099;如需在一台机器启动多个 Worker,需为不同实例指定不同端口(如 1984),并确保控制机按相同端口连接。
四 配置控制机 Controller 并运行测试
- 配置控制机($JMETER_HOME/bin/jmeter.properties)
- 指定执行机列表:remote_hosts=IP1:端口,IP2:端口(如未改端口,默认 1099)
- 同样建议:server.rmi.ssl.disable=true
- 资源与文件分发
- 将 .jmx 脚本及所有依赖(如 CSV 数据文件、JAR 插件)复制到各执行机的相同路径,否则执行机会因找不到文件而报错。
- 运行方式
- GUI 调试(仅用于调试):打开 JMeter GUI → 加载脚本 → 运行 → 选择“远程启动”某个或“远程启动所有”。
- 命令行正式压测(推荐):
- 使用 remote_hosts 启动全部:
- ./jmeter -n -t /path/test.jmx -r -l result.jtl
- 指定执行机列表启动:
- ./jmeter -n -t /path/test.jmx -l result.jtl -Dserver.rmi.ssl.disable=true -R IP1,IP2
- 生成 HTML 报告(压测结束后):
- ./jmeter -g result.jtl -o report-dashboard
- 线程与并发
- 总并发 ≈ 单个脚本的线程数 × 执行机数量;如需扩大并发,优先横向扩展执行机。
五 常见问题与排查
- 无法连接执行机
- 检查控制机到执行机 1099 端口连通性(telnet IP 1099),排查防火墙/安全组策略。
- “Cannot start. ubuntu is a loopback address”
- 未在 Worker 显式设置 java.rmi.server.hostname 导致 RMI 绑定到回环地址,启动命令需加:-Djava.rmi.server.hostname=执行机IP。
- 执行机找不到 CSV/依赖文件
- 资源不会自动分发,需在各执行机相同目录放置相同文件与目录结构。
- 报告粒度过粗
- 在 jmeter.properties 将 jmeter.reportgenerator.overall_granularity=5000(单位毫秒),可获得更细粒度的报表。
- 控制机资源争用
- 正式压测建议控制机不运行 GUI 与 Worker,避免资源竞争影响结果准确性。
- 需要启用 SSL
- 可使用 create-rmi-keystore.sh 生成密钥与证书,分发到所有节点后保持默认 SSL 配置启用。