温馨提示×

Ubuntu下JMeter分布式测试如何实现

小樊
49
2025-11-15 01:15:24
栏目: 智能运维

Ubuntu 下 JMeter 分布式测试实操指南

一 架构与前置准备

  • 角色划分
    • Controller/Master:仅负责下发测试计划与汇总结果,建议不在其上产生负载。
    • Workers/Slaves/Agents:实际产生压力的执行机,可横向扩展。
  • 环境与网络
    • 所有节点安装相同版本的 Java(推荐 OpenJDK 11)Apache JMeter
    • 节点间网络互通,建议使用内网;如开启防火墙,放行 RMI 端口 1099 及高端口范围(RMI 会动态分配)。
    • 控制机与执行机时间同步(如未同步可能影响聚合报告时间线)。

二 安装与配置

  • 安装 Java 与 JMeter(所有节点)
    • 安装 JDK
      • sudo apt update && sudo apt install -y openjdk-11-jdk
      • java -version
    • 安装 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
  • 执行机 Workers 配置
    • 编辑 bin/jmeter.properties
      • server.rmi.ssl.disable=true(禁用 SSL,避免握手问题)
      • 可选:显式设置本机对外 IP(多网卡/云主机强烈建议)
        • java.rmi.server.hostname=192.168.1.101(替换为执行机实际 IP)
    • 启动执行机
      • ./jmeter-server -Djava.rmi.server.hostname=192.168.1.101
      • 后台运行:nohup ./jmeter-server -Djava.rmi.server.hostname=192.168.1.101 > jmeter-server.log 2>&1 &
      • 成功标志:日志出现 “Created remote object … (1099)” 字样。
  • 控制机 Controller 配置
    • 编辑 bin/jmeter.properties
      • remote_hosts=192.168.1.101:1099,192.168.1.102:1099(列出全部执行机)
      • server.rmi.ssl.disable=true
    • 资源同步
      • .jmx 脚本及其依赖(如 CSV 数据文件、JAR 插件)复制到各执行机的相同绝对路径,否则执行机会报文件找不到。

三 执行测试

  • GUI 方式(仅用于调试)
    • 在控制机启动 GUI:./jmeter
    • 打开测试计划,菜单 Run → Remote Start → 选择单个执行机或 Remote Start All。
  • 命令行方式(正式压测推荐)
    • 基本命令
      • ./jmeter -n -t /path/to/test.jmx -r -l result.jtl
      • 参数说明:-n 非 GUI;-t 脚本;-r 远程启动 remote_hosts 全部执行机;-l 结果文件。
    • 生成 HTML 报告
      • 在测试结束后执行:./jmeter -g result.jtl -o ./report
      • 打开 report/index.html 查看聚合报告、图表与错误详情。

四 常见问题与排查

  • 无法连接执行机
    • 在控制机执行:ping <执行机IP> 与 telnet <执行机IP> 1099;不通则检查防火墙/安全组与网络路由。
  • “Cannot start. … is a loopback address”
    • 未在 Worker 显式设置 java.rmi.server.hostname 导致绑定到 127.0.1.1。启动时加上 -Djava.rmi.server.hostname=<本机内网IP> 或在 jmeter.properties 中设置。
  • SSL 握手失败
    • 控制机与所有执行机的 server.rmi.ssl.disable=true 必须一致。
  • 执行机报 “Server failed to start: could not find ApacheJmeter_core.jar”
    • 常见于环境变量问题,但日志若已出现 “Created remote object … (1099)” 通常可忽略并继续连接测试。
  • 文件找不到(CSV、JAR 等)
    • 确认脚本与依赖在所有执行机相同路径下;分布式不会自动分发本地文件。
  • 资源不足或 OOM
    • 调整执行机 bin/jmeter 中的 HEAP(如:-Xms2g -Xmx4g),并减少单台并发或增加执行机数量。

五 实践建议

  • 控制机尽量不承担负载;并发规划遵循:总虚拟用户数 ≈ 单执行机并发 × 执行机数量。
  • 固定版本基线:所有节点保持 Java 与 JMeter 版本一致,避免因版本差异导致序列化/插件兼容问题。
  • 结果一致性:使用非 GUI 模式压测;统一 CSV 分隔符、编码(UTF-8)JMeter 属性文件,确保聚合报告准确。
  • 监控与限流:在执行机开启系统/应用监控(CPU、内存、网络、TCP 连接),必要时对目标系统做限流与熔断保护,避免影响线上。

0