JMeter进阶之分布式测试

JMeter 是Java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起Java 内存溢出的错误。为了让JMeter工具能提供更大的负载能力,JMeter具备使用多台机器同时产生负载的机制。

01

如何实现多台负载机同时运行?

当然不会多个人坐在多台负载机面前,一喊开始,大家同时启动JMeter。这种方式很笨,也很难达到真正的同步。

其实,我们通过单个JMeter 客户端就可以控制多个远程的JMeter服务器,使它们同步的对服务器进行压力测试。

通过远程运行JMeter,测试人员可以跨越多台低端计算机复制测试,这样就可以模拟一个比较大的服务器压力,一个JMeter客户端实例,理论上可以控制任意多的远程JMeter实例,并通过它们收集测试数据。

这样一来,就有了如下特性:

保存测试采样数据到本地机器

通过单台机器管理多个JMeter执行引擎。

没有必要将测试计划复制到每一台机器,JMeter GUI客户端会将它发往每一台JMeter服务器。

每一台JMeter远程服务器都执行相同的测试计划,JMeter不会在执行期间做负载均衡,每一台服务器都会完整地运行测试计划。

在2.4G Hz~3.6GHz的CPU、4GB 内存的JMeter 客户端上,可以处理线程数约为3000~4000。另外,如果所有负载由一台机器产生,网卡和交换机端口都可能产生瓶颈,所以一个JMeter 客户端线程数不应超过4000 。

采用JMeter 远程模式并不会比独立运行相同数目的非GUI 测试更耗费资源。但是,如果使用大量的JMeter 远程服务器,可能会导致客户端过载,或者网络连接发生拥塞。

02

使用多台机器产生负载的操作步骤

Step 1

在所有期望运行JMeter作为负载生成器的机器上安装JMeter,并确定其中一台机器作为Controller,其他的的机器作为Agent。然后运行所有Agent 机器上的JMeter-server 文件(假定使用两台机器192.168.0.100 和192.168.0.101 作为Agent )

Step 2

在Controller机器的JMeter的bin目录下,找到JMeter.properties 文件,编辑该文件:

查找:remote_hosts=127.0.0.1

修改为:remote_hosts=192.168.0.100:1099,192.168.0.101:1099

这里要特别注意端口号,有些资料说明端口1644为JMeter的Controller和Agent之间进行通信的默认RMI端口号,但是在测试时发现,设置为1644运行不成功,改成1099后运行通过。另外还要留意Agent 的机子是否开启了防火墙等。

Step 3

启动Controller机子上的JMeter应用,选择菜单“运行”--->“远程启动”,来分别启动Agent,也可以直接选择“远程全部启动”来将所有的Agent启动。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180515B0L4P600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券