CentOS 环境下 JMeter 分布式压测设置
一 架构与前置条件
- 角色划分:一台作为控制机 Master(调度与聚合结果),多台作为执行机 Slave(产生并发)。也可让 Master 兼任 Slave,但更推荐分离以减小干扰。所有节点建议在同一网段,并开启时间同步(如 chrony/ntpd)。
- 版本一致:所有节点使用相同的 JDK 1.8 与 JMeter 版本/插件,避免序列化与兼容性问题。
- 资源基线:在约 2–3 GHz CPU 的单机 JMeter 客户端上,通常可支撑约 1000–2000 线程(取决于协议、断言、监听器与处理逻辑)。
二 环境安装与验证
- 安装 JDK 与 JMeter(示例路径,可按需调整):
- 配置环境变量(全局或用户级均可,示例为全局):
- 编辑 /etc/profile 或 ~/.bashrc,加入:
- export JAVA_HOME=/opt/jdk1.8.0_181
- export JMETER_HOME=/opt/apache-jmeter-5.4.3
- export PATH=$PATH:$JAVA_HOME/bin:$JMETER_HOME/bin
- 使配置生效:source /etc/profile 或 source ~/.bashrc
- 验证:java -version;jmeter -v
- 建议:控制机与执行机均完成上述安装与验证,保持版本一致。
三 关键配置步骤
- 关闭 RMI SSL(内网测试常用,便于连通):
- 在所有节点(Master 与 Slave)编辑 $JMETER_HOME/bin/jmeter.properties:
- server.rmi.ssl.disable=true
- 固定 RMI 端口(便于防火墙放行):
- 在每台 Slave 的 $JMETER_HOME/bin/jmeter.properties 中设置:
- server_port=1099
- server.rmi.localport=1099
- 在每台 Slave 的 $JMETER_HOME/bin/jmeter-server 中设置本机 IP(取消注释并填写):
- RMI_HOST_DEF=-Djava.rmi.server.hostname=本机IP
- 在 Master 的 $JMETER_HOME/bin/jmeter.properties 中登记所有 Slave:
- remote_hosts=192.168.1.20:1099,192.168.1.21:1099,192.168.1.22:1099
- 防火墙放行(示例为 firewalld,生产可按最小端口开放):
- firewall-cmd --zone=public --add-port=1099/tcp --permanent
- firewall-cmd --reload
- 启动与连通性检查:
- 各 Slave 执行:$JMETER_HOME/bin/jmeter-server(日志:bin/jmeter-server.log)
- Master 查看:bin/jmeter.log 与 GUI 中“运行 → 远程启动/远程启动所有”
四 运行测试与结果收集
- GUI 方式(仅建议调试):
- Master 启动 GUI:jmeter
- 运行 → 远程启动(单个 Slave)或 远程启动所有(All Slaves)
- 非 GUI 命令行(推荐压测):
- 基本执行(使用配置文件中的 remote_hosts):
- jmeter -n -t test.jmx -l result.jtl -j run.log -e -o report
- 指定远程节点(覆盖 remote_hosts):
- jmeter -n -t test.jmx -R 192.168.1.20:1099,192.168.1.21:1099 -l result.jtl -e -o report
- 常用参数:-n(非GUI)、-t(脚本)、-l(结果JTL)、-j(日志)、-o(HTML报告目录,需为空)、-R(指定远程列表)
- 结果聚合与报告:
- 各 Slave 执行完成后将结果回传 Master,在 Master 使用聚合报告或Dashboard Report查看整体指标(吞吐、响应时间分位、错误率等)。
五 常见问题与最佳实践
- 版本与依赖:Master 与所有 Slave 的 JDK/JMeter/插件务必一致;脚本依赖的 JAR/CSV/证书需在 Slave 上保持相同路径与内容。
- CSV 参数化:每台 Slave 放置一份 CSV,且数据应去重或分片,避免多机重复数据导致统计偏差。
- 网卡与 RMI 主机名:多网卡/云主机需确保 RMI 绑定到与控制机可达的 IP,必要时在 jmeter-server 中显式设置 -Djava.rmi.server.hostname。
- 端口与防火墙:固定 server_port=1099 与 server.rmi.localport=1099,并在防火墙放行对应端口;如需开放更多端口,可一并放行。
- Master 参与压测:默认 Master 不执行采样;如需让 Master 也产生压力,可在 Master 上也启动 jmeter-server 并将其加入 remote_hosts。
- 资源与规模:单台 JMeter 客户端约可支撑 1000–2000 线程(视场景而定);并发过高时优先横向扩展 Slave 数量而非仅提高单机线程。
- 日志排查:优先查看 bin/jmeter-server.log(Slave)与 bin/jmeter.log(Master)定位连通与执行问题。