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 连接),必要时对目标系统做限流与熔断保护,避免影响线上。