25. Apache JMeter 分布式测试一步一步¶
这个简短的教程解释了如何使用多个系统来执行压力测试。在我们开始之前,有几件事需要检查。
- 系统上的防火墙已关闭或打开了正确的端口。
- 所有客户端都在同一个子网上。
- 如果使用192.xxx或10.xxx IP 地址,则服务器位于同一子网中。如果服务器不使用192.xx或10.xx IP 地址,应该没有任何问题。
- 确保 JMeter 可以访问服务器。
- 确保在所有系统上使用相同版本的 JMeter 和 Java。混合版本将无法正常工作。
- 您已为 RMI 设置 SSL或禁用它。
确定系统准备就绪后,就可以设置远程测试了。本教程假设您已经在所有系统上安装了 JMeter。JMeter 的工作方式是一个控制器节点在多个工作节点上启动测试。
在本教程中,我们仅使用 GUI 模式进行演示。在现实生活中,您应该使用 CLI 模式(非 GUI)来开始负载测试
25.1 术语¶
在我们深入了解分步说明之前,最好先定义术语并确保定义清晰。
- 控制器节点
- 运行 JMeter GUI 的系统,它控制测试
- 工作节点
- 运行jmeter-server的系统,它从 GUI 接收命令并将请求发送到目标系统
- 目标
- 我们计划进行压力测试的网络服务器
25.2 一步一步¶
- 在工作节点上,转到jmeter/bin目录并执行 jmeter-server.bat(在 unix 上 为jmeter-server )。
- 在作为控制台的控制器节点上,打开 Windows 资源管理器并转到 jmeter/bin目录
- 在文本编辑器中打开jmeter.properties
- 编辑remote_hosts=127.0.0.1行
- 添加 IP 地址。例如,如果我在192.168.0.10、...、192.168.0.15上运行 JMeter 服务器,则条目将如下所示:
remote_hosts=192.168.0.10,192.168.0.11,192.168.0.12,192.168.0.13,192.168.0.14
- 启动 JMeter。
- 打开您要使用的测试计划

25.2 开始测试¶
此时,您已准备好开始负载测试。如果要仔细检查工作节点是否正常工作,请在编辑器中打开jmeter.log。您应该在日志中看到以下内容。
Writing log file to: /XXXX/XXXXX/bin/jmeter-server.log Created remote object: UnicastServerRef [liveRef: [endpoint:[192.X.X.X:XXXXX](local),objID:[-6a665beb:15a2c8b9419:-7fff, 3180474504933847586]]]
如果您没有看到此消息,则表示jmeter-server未正确启动。有关调试问题的提示,请转到提示部分。启动测试有两种方法:单个系统和所有系统。
25.5 限制¶
分布式测试有一些基本限制。这是已知项目的列表,没有特定的顺序。
- RMI 不能在没有代理的情况下跨子网通信;因此,JMeter 也不能没有代理。
- 从 2.9 版本开始,JMeter 将所有测试结果剥离 Response 数据发送到控制台,这样可以减少对网络 IO 的影响。确保您监控您的网络流量,以便此流量不会引起争用
- 在 2-3 GHz CPU(最近的 CPU)上运行的单个 JMeter 客户端可以处理 1000-2000 个线程,具体取决于测试类型。
25.7 提示¶
在某些情况下,防火墙可能仍会阻止 RMI 流量。
防病毒和防火墙
在负载测试期间应停止防病毒,因为它会严重影响导致错误结果的时间。
需要从 Windows 服务中停止防火墙,或者至少需要打开一些端口。
- 打开控制面板
- 打开管理工具
- 双击服务
- 转到赛门铁克防病毒,右键单击并选择停止
Windows 防火墙
- 打开网络连接
- 选择网络连接
- 右键单击并选择属性
- 选择高级选项卡
- 取消选中互联网连接防火墙
Linux
在 Linux 上,iptables 可能默认打开。有关说明,请参阅 用户手册中的远程测试
在 RedHat(或衍生产品)上,iptables 默认是打开的。执行
service iptables stop停止 Linux 防火墙或确保打开正确的端口。