Loading... ## 一、概述 **在单台机器上进行压测时,受限于本机硬件资源,很难模拟高并发场景。JMeter 提供了分布式压测能力,通过一台****控制机(Master)**同时控制多台**执行机(Slave)**来发起压力,从而突破单机瓶颈。 **三者的关系如下:** ``` 控制机(Master)──控制指令──▶ 执行机(Slave)──发起请求──▶ 被测系统(SUT) ──▶ 执行机(Slave)──发起请求──▶ 被测系统(SUT) ``` ## 二、环境准备 ### 前提条件 1. **所有机器的** **JDK 版本和 JMeter 版本必须一致**(包括位数,统一使用 64 位) 2. **控制机与执行机之间网络互通**(需确保防火墙放行相应端口) 3. **本示例以2 台机器**为例: * **控制机(Master)**:运行 JMeter GUI,负责控制和聚合结果,IP 为 `192.168.0.x` * **执行机(Slave)**:运行 JMeter Server,负责实际执行压测脚本,IP 为 `192.168.0.xx` ### 查看本机 IP **在两台机器上分别打开 cmd,执行:** ``` ipconfig ``` **记录下各自的 IP 地址。** --- ## 三、执行机(Slave)配置 ### 1. 配置 jmeter-server.bat **进入执行机的 JMeter 安装目录下**的 bin`文件夹,找到`jmeter-server.bat`,打开后在文件开头添加: ``` set HEAP=-Xms2g -Xmx4g set RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.0.xx ``` > **说明**: > > * `HEAP`:设置 JVM 堆内存,根据机器配置调整(注意:-Xms2g -Xmx4g不要加双引号) > * `RMI_HOST_DEF`:绑定执行机自身的 IP 地址,确保控制机能正确连接 > * **将 **`192.168.0.xx` 替换为执行机的实际 IP ### 2. 配置 jmeter.properties **在执行机的** bin`目录下打开`jmeter.properties`,找到并修改以下配置项: ``` # 禁用 RMI SSL(控制机和执行机都需要配置) server.rmi.ssl.disable=true # 设置 Server 端口 server_port=1099 # 设置 RMI 本地端口 server.rmi.localport=4000 ``` > **注意**:配置项前面不要有 `#` 注释符,确保配置已生效。 --- ## 四、控制机(Master)配置 ### 1. 配置 jmeter.bat **进入控制机的 JMeter 安装目录下的** `bin` 文件夹,打开 `jmeter.bat`,在文件开头添加: ``` set JVM_ARGS=-Djava.rmi.server.hostname=192.168.0.x ``` > 将 `192.168.0.x` 替换为控制机的实际 IP。注意:每次升级 JMeter 后需要重新配置。 ### 2. 配置 jmeter.properties **在控制机**的 `bin` 目录下打开 `jmeter.properties`,找到并修改以下配置项: ``` # 禁用 RMI SSL server.rmi.ssl.disable=true # 配置远程执行机列表(多个执行机用逗号分隔) remote_hosts=192.168.0.xx:1099 ``` > **如有多台执行机,格式为:**`remote_hosts=192.168.0.xx:1099,192.168.0.xxx:1099` --- ## 五、防火墙配置 **确保执行机上以下端口已放行:** | **端口** | **用途** | | -------- | -------------------- | | **1099** | **RMI 注册端口** | | **4000** | **RMI 数据传输端口** | Windows 下可通过**高级安全 Windows Defender 防火墙** 添加入站规则来放行以上端口。 --- ## 六、CSV 数据文件配置 当测试脚本中使用了 ****CSV 数据文件设置(CSV Data Set Config)** 时,需要注意:**执行机(Slave)上不会自动获取控制机上的 CSV 文件**,因此需要手动处理。 ### 使用相对路径(推荐) JMeter 的相对路径是相对于**JMeter 的启动目录**(即 `bin` 目录)来解析的,利用这一点,可以在不同安装路径的机器上统一使用相同的相对路径。 **第一步**:在每台机器的 JMeter `bin` 目录下新建文件夹,放入 CSV 文件。例如: ``` bin/csv/testdata.csv ``` **假设控制机和执行机的 JMeter 安装路径不同也没关系:** ``` 控制机:D:\jmeter\apache-jmeter-5.5\bin\csv\testdata.csv 执行机:E:\tool\apache-jmeter-5.5\bin\csv\testdata.csv ``` **第二步**:在 JMeter 的 CSV Data Set Config 中,文件名使用相对路径: ``` csv/testdata.csv ``` **这样 JMeter 在每台机器上**都会从各自的 `bin/csv/` 目录下查找文件,**不要求各机器的 JMeter 安装路径完全一致**。 > **绝对路径 vs 相对路径对比**: > > > | **方式** | **要求** | **灵活性** | > | ------------ | ----------------------------------------------- | ---------- | > | **绝对路径** | **所有机器 JMeter 安装路径必须完全一样** | **差** | > | **相对路径** | **每台机器在**`bin`目录下保持相同的目录结构即可 | **好** | ### 重要提示 * **每台执行机会独立读取 CSV 文件**,默认情况下各执行机的数据是各自从头开始读取的。如果希望所有线程共享同一份数据且不重复,可以在 CSV Data Set Config 中勾选 **"Stop thread on EOF"**(遇到文件末尾时停止线程),或通过脚本控制。 * **CSV 文件内容较大时,建议确保各执行机上的文件内容一致,避免因数据不同导致压测结果偏差。** --- ## 七、启动与验证 ### 步骤 1. **启动执行机**:在执行机上运行 `bin/jmeter-server.bat`,看到 `Server started` 日志表示启动成功 2. **启动控制机**:在控制机上运行 `bin/jmeter.bat`,打开 JMeter GUI 3. **创建测试脚本**:在控制机上编写好压测脚本 4. **远程启动**:点击菜单 `运行 → 远程启动`,选择对应的执行机  **启动成功后,执行机会显示执行日志,控制机上可实时查看压测结果。** ### 多执行机扩展 **如需扩展更多执行机,只需:** 1. **在新执行机上完成 Slave 配置** 2. **在控制机的** `remote_hosts` 中追加新执行机的 `IP:1099` --- ## 八、常见问题 ### 1. 远程启动时显示 127.0.0.1 **原因**:控制机的 `jmeter.properties` 中存在多个 `remote_hosts` 配置产生冲突。默认情况下,`jmeter.properties` 中自带 `remote_hosts=127.0.0.1`,如果添加新的 `remote_hosts=192.168.0.xx:1099` 时没有将原来的配置注释掉,会导致配置冲突,JMeter 仍使用 `127.0.0.1`。 **解决**:在控制机的 `jmeter.properties` 中,将原来的 `remote_hosts=127.0.0.1` 注释掉(前面加 `#`),只保留实际的执行机地址: ``` # remote_hosts=127.0.0.1 remote_hosts=192.168.0.xx:1099 ``` **修改后重启控制机的 JMeter 即可。** ### 2. 连接超时 **原因**:防火墙未放行 1099 或 4000 端口。 **解决**:检查两台机器的防火墙设置,确保端口互通。可通过 `telnet 192.168.0.xx 1099` 测试连通性。 ### 3. 版本不一致导致启动失败 **原因**:控制机和执行机的 JDK 或 JMeter 版本不一致。 **解决**:统一所有机器的 JDK 和 JMeter 版本(包括 32/64 位)。 最后修改:2026 年 04 月 30 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏
此处评论已关闭