Jmeter分布式 无奈的根源

↑↑↑“扫描关注 开源测试联盟”↑↑↑

Jmeter是java应用,

对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误。为什么呢? 你发现CPU 和 MEM 没有占用多少 就是并发伤不起?

一个IP地址的端口可以有65536个之多,并发测试 会持续使用本地端口,无法快速释放 可以通过 netstat -ano|find "发送请求的ip地址" /c 进行统计查看;例如:netstat -ano|find "192.168.1.1" /c,当 端口占用累计达到 1.6w 以上,本地请求就无法发出了,就需要等待释放;所以为了让jmeter工具提供更大的负载能力,jmeter设计了短小精悍一有了使用多台机器同时产生负载的机制。这才是原因,所以这也是使用过程中大并发上不上去的原因;

那么,是如何实现多台负载机同时运行的呢?当然不会多个人坐在多台负载机面前,一喊开始,大家同时启动jmeter。这种方式很笨,也很难达到真正的同步。其实,我们通过单个jmeter客户端就可以控制多个远程的jmeter服务器,使它们同步的对服务器进行压力测试。

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

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

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

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

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

在1.4G Hz~3GHz的CPU、1GB内存的JMeter客户端上,可以处理线程100~300。但是Web Service例外。XML处理是CPU运算密集的,会迅速消耗掉所有的CPU。一般来说,以XML技术为核心的应用系统,其性能将是普通Web应用的10%~25%。另外,如果所有负载由一台机器产生,网卡和交换机端口都可能产生瓶颈,所以一个JMeter客户端线程数不应超过10 0。

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

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

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

(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的机子是否开启了防火墙等。

(3)启动controller机子上的jmeter应用,选择菜单“运行”--->“远程启动”,来分别启动agent,也可以直接选择“远程全部启动”来将所有的agent启动。

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

扫码关注腾讯云开发者

领取腾讯云代金券