温馨提示×

Debian上JMeter分布式测试方法

小樊
31
2025-12-11 04:21:13
栏目: 智能运维

在 Debian 上进行 JMeter 分布式测试

一 架构与准备

  • 架构说明:使用一台作为主节点 Controller,多台作为从节点 Agent。Controller 负责分发测试计划与汇总结果;每个 Agent 完整执行同一份测试计划,彼此不做负载均衡,因此总压力≈单台线程数 × 从节点数。为保证稳定,建议 Controller 与所有 Agent 使用相同版本的 Java 与 JMeter,并处于同一网段且网络互通。为降低复杂度,可先禁用 RMI SSL。
  • Java 与 JMeter 安装(所有节点):
    • 安装 OpenJDK(示例为 OpenJDK 11):sudo apt-get update && sudo apt-get install -y openjdk-11-jdk
    • 下载并解压 JMeter(示例版本 5.4.3):
      wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.3.tgz
      tar -xzf apache-jmeter-5.4.3.tgz
      sudo ln -sfn $PWD/apache-jmeter-5.4.3 /opt/jmeter
      echo 'export JMETER_HOME=/opt/jmeter' | sudo tee -a /etc/profile.d/jmeter.sh
      echo 'export PATH=$JMETER_HOME/bin:$PATH' | sudo tee -a /etc/profile.d/jmeter.sh
      source /etc/profile.d/jmeter.sh
      
    • 验证:java -versionjmeter -v

二 节点配置

  • 主节点 Controller 配置:
    • 编辑 $JMETER_HOME/bin/jmeter.properties,添加所有从节点地址(默认端口 1099):
      remote_hosts=192.168.1.11:1099,192.168.1.12:1099
      server.rmi.ssl.disable=true
      
  • 从节点 Agent 配置:
    • 指定本机 RMI 主机名(避免多网卡取错 IP):编辑 $JMETER_HOME/bin/jmeter-server,设置:
      RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.1.11
      
    • 可选:自定义端口(如 1089),编辑 $JMETER_HOME/bin/jmeter.properties
      server_port=1089
      server.rmi.localport=1089
      
      并在 remote_hosts 中使用对应端口。
    • 禁用 RMI SSL(与 Controller 一致):server.rmi.ssl.disable=true
    • 启动:$JMETER_HOME/bin/jmeter-server(后台可用:nohup $JMETER_HOME/bin/jmeter-server &)。

三 运行测试

  • GUI 方式(仅用于调试):在 Controller 执行 jmeter,打开测试计划,通过 Run → Remote Start 启动单个 Agent,或 Run → Remote Start All 启动全部。
  • 非 GUI 方式(推荐压测):在 Controller 执行
    • 启动全部从节点:jmeter -n -t testplan.jmx -r -l result.jtl
    • 指定部分从节点:jmeter -n -t testplan.jmx -R 192.168.1.11:1099,192.168.1.12:1099 -l result.jtl
    • 生成报告:jmeter -g result.jtl -o report/
    • 说明:非 GUI 模式不启动 JMeter GUI,资源占用更低,适合正式压测与 CI。

四 常见问题与排查

  • 无法连接从节点(Connection refused/超时):
    • 核对 IP、端口remote_hosts 一致;开放防火墙端口(默认 1099,若自定义需放行对应端口);确保 Controller 与 Agent 网络互通。
  • 查看结果树响应为空:
    • 分布式模式下,默认不回传响应体。如需查看,可在 Controller 的 jmeter.properties 中启用相关项(如 view.results.tree.max_size 等)以允许更大响应回传,或改用聚合报告/后端监听器分析。
  • 多网卡导致 RMI 绑定错误 IP:
    • jmeter-server 中显式设置 RMI_HOST_DEF=-Djava.rmi.server.hostname=<内网IP>
  • CSV 参数化文件不一致:
    • 将 CSV 等数据文件复制到所有 Agent 相同路径,并在测试计划中统一使用相对路径或相同绝对路径
  • 版本与环境不一致:
    • 保证 Java 版本JMeter 版本/插件 一致,避免因序列化或插件差异导致执行异常。

五 实践建议

  • 角色分离:尽量让 Controller 仅做调度与聚合,不承担压测负载;如需让 Controller 也参与压测,可在其上也启动 jmeter-server 并将其加入 remote_hosts
  • 资源与规模:单台机器的 JMeter 受 CPU/内存/网卡 限制,必要时横向扩展 Agent;预估压力时按“总压力 = 单台线程数 × 从节点数”规划,并逐步加压观察瓶颈。
  • 网络与端口:优先使用内网通信,固定并统一 RMI 端口,在防火墙/安全组中放行,减少因网络波动导致的波动与丢包。

0