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启动。
领取专属 10元无门槛券
私享最新 技术干货