jmeter分布式压测对master、slave防火墙配置

首先要了解jmeter分布式压测的基础概念:master为统计结果的服务器,slave为各台压力机,如下图所示

 

 

 

一、结论

针对master

1、修改jmeter.properties的client.rmi.localport=61099(值可以是自定义的,认为0时会随机分配端口)
2、防火墙打开端口61099-61101(范围也可以设大一点,目前源码我只发现了其使用了61010和61011,即配置的client.rmi.localport加1和加2)
3、修改jmeter.properties的server_port=1099(认是1099,可不修改,需要与slave配置的server_port一致)

针对各slave

1、修改jmeter.properties的server_port=1099(认是1099,可不修改,需要与master配置的server_port一致)
2、防火墙打开端口1099

二、原理

防火墙会拦截其他服务器对“未开启端口”的访问,但不拦截服务器主动发起“未开启端口”连接到其他服务器


jmeter开启分布式压测步骤
1、运行slave的jmeter-server,此时会监听1099端口(即配置的server_port)
2、运行master的jmeter,此时master会使用socket连接到slave的1099端口

        注意:这里master的端口是随机的,但因为是master主动发起连接,所以不需要理会master的防火墙。但slave的1099端口是被动接收的,所以slave的防火墙要开启1099端口
3、master连接salve的1099端口成功后,会打开61010和61011端口(即配置的client.rmi.localport加1和加2),然后告诉salve主动连接这两个端口

        注意:这里与2是相反的,master的61010和61011端口是被动接收的,所以master的防火墙要开启61010和61011端口。

                 问:如果有多个salve呢? 答:即使有多个salve,master依然是给出这两个端口,我猜想是jmeter为了方便统一处理,才不设计成一个端口对应一个salve

                 问:为什么不只开启61010和61011端口? 答:既然配了61099,jmeter会不会在其他地方用到了61099。虽然我在运行时netstat找不到61099,但稳健起见还是范围设大一点吧
4、master通过61010和61011端口告诉所有slave开启线程和开启测试,slave把测试结果返回给master

 

jmeter的具体实现(可不看)

步骤2中master连接slave的具体实现:

jmeter会在ClientJMeterEngine的getEngine方法调用LocateRegistry.getRegistry,new出一个TCPEndpoint对象,然后registry.lookup(name)使用这个TCPEndpoint对象发起tcp连接

 

步骤3中master获取client.rmi.localport的具体实现

RemoteSampleListenerImpl 加了2 通知slave开启测试和结束测试

 

RemoteThreadsListenerImpl 加了1 通知slave开启线程和结束线程

 

相关文章

Jmeter:Authenticationcredentialswerenotprovided上次在使...
初次使用jmeter时,结果树中返回的数据为未转码内容,如下:...
jmeter默认语言设置: 1、临时设置:进入options--ChooseLa...
第一步:打开jmeter工具。 第二步:点击鼠标右击,点击添加...
在之前的博文中,Jmeter二次开发——基于Java请求,已介绍了...
打开虚拟机然后用远程连接工具SSH连接到数据库将serveragent...