JMeter分布式压测的核心是卸载主控机压力,让从机专注发压:主控机仅分发脚本、控制启停、收集.jtl结果并聚合报告,不运行线程组;从机独立配置、禁用GUI、指定RMI绑定IP与端口,确保资源隔离与通信正常。

直接上分布式,不是为了“看起来高级”,而是因为单机压测机自己先成了瓶颈——CPU飙高、内存溢出、端口耗尽、网络卡顿,这些都会把被测系统的真实性能掩盖掉。配置分布式压测机,核心就一件事:把压力生成任务从主控机彻底卸载出去,让每台从机(Slave)只干一件事——发请求、记原始数据、本地缓存。
明确主从分工,主控机不参与压测
Master只负责下发测试计划(.jmx)、启动/停止指令、收集各Slave返回的.jtl结果文件、最后聚合报告。它不运行任何线程组,也不开启监听器(如View Results Tree、Aggregate Report)。命令行执行必须用非GUI模式:
-n 表示无界面
-t 指定脚本
-R 指定远程Slave列表
-l 指定结果输出路径
例如:jmeter -n -t login.jmx -R 192.168.1.101:1099,192.168.1.102:1099 -l result.jtl
从机配置要隔离资源、避免干扰
- 每台Slave独立安装JMeter和匹配版本的JDK(推荐JDK 11+),不共用主控机环境
- 启动时强制指定本机IP:
./jmeter-server -Djava.rmi.server.hostname=192.168.1.101,防止RMI绑定到localhost或错误网卡 - 关闭SSL认证(初期调试阶段):
server.rmi.ssl.disable=true,写在jmeter.properties里 - 为每台Slave分配独立端口(如1099、2001、2002),避免多实例冲突;修改
server_port参数即可 - 禁用所有GUI相关监听器,不启用任何实时绘图组件,减少JVM额外开销
规避常见资源陷阱
-
CPU与内存:每台Slave建议4核8G起步;JVM堆内存设为
-Xms4g -Xmx4g,避免频繁GC;不要盲目堆线程数,先实测单台稳定并发上限(通常2000–3000线程较稳妥) -
网络端口:Linux默认临时端口范围是32768–65535(约3.2万个),单台压测若用短连接(HTTP/1.1未复用),并发超1000后容易触发
Cannot assign requested address;可通过sysctl -w net.ipv4.ip_local_port_range="1024 65535"扩大范围 -
带宽瓶颈:千兆网卡理论吞吐约125MB/s,若接口响应体大(如含图片、JSON数组),单台出口带宽可能先满;建议监控
iftop或nload,确保单机出口利用率≤70%
验证通信与负载均衡
启动前务必确认:
• 所有Slave能ping通Master,且Master能telnet通每个Slave的RMI端口(如1099)
• 防火墙已放行对应端口(Linux用ufw allow 1099,CentOS用firewall-cmd --add-port=1099/tcp)
• 各Slave日志中出现Created remote object和Waiting for test to begin表示注册成功
压测中观察各Slave的CPU、内存、网络使用率是否接近,差异过大说明脚本分发不均或某台机器配置异常

















