温馨提示×

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 配置启用。

0