jemter + ant 远程启动salve机器 为什么 jmeter 分布式测试,一定要设置 java.rmi.server.hostname

一. 背景

主机:windows 7  8G + 500SSD + 500HDD

助攻机:虚拟机 Windows Server 2008 R2 2G + 80G

主机和助攻机做分布式,需要结合jenkins + ant做持续集成,但发现如果jmeter脚本要在助攻机上运行,如果每次在主机jmeter GUI界面上手动远程启动助攻机,不太方便,因此想通过配置ant的方法来解决这个问题

二. 通过配置build.xml的办法

这个方法在github ant-jmeter文档中有提及:有个参数是runremote,它如果设置为"true",就会运行jmeter.properties中指定的助攻机,因此我们得出结论,需要配置两个参数jmeterproperties 和 runremote

 配置方法也比较简单

三. 坑一:Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445

一直卡在这里,最后不得不终止

后来参考《Jmeter远程执行,slave机器显示调用成功,但是master机器没有返回测试结果解决》这篇文档,关了Vmware network Adapter vmnet1和Vmware network Adapter vmnet8

后来发现禁用了xshell就连不上了,于是又启用了

参考另一篇文章《为什么 jmeter 分布式测试,一定要设置 java.rmi.server.hostname》里面罗列了4445端口问题的几个原因:

1. 防火墙干扰   这个我已经关了的

2. 关闭监听功能  暂未尝试

3. 端口没有开启

4. 信息被阻塞

5. 在日志中寻找

这里按照方法5做了排查,打开助攻机的jmeter-server.log,发现果然有一行错误

java.rmi.ConnectException: Connection refused to host: 192.168.56.1; nested exception is: 
    java.net.ConnectException: Connection refused: connect

 192.168.56.1,这是什么鬼?不是我主机ip,那篇文章里说道

根据对 jmeter master/slave 通信机制的理解,不仅 master 主动向 slave 通信, slave 也向 master 主动通信,自然要知道彼此的地址。

由此联想到,在 slave 节点多网卡的时候,一般都设置 hostname,猜测 master 也需要进行同样的设置,告知 slave 自己的通信地址。

于是在 ubuntu master 主机的 system.properties 最后一行添加,

java.rmi.server.hostname=10.27.2.13

然后在system.properties中配置我的ip即可

四. 坑二:error 100%

jenkins上显示

 测试报告中显示,这不是我们期望的

 其中接口的响应结果是

Non HTTP response code: org.apache.http.conn.HttpHostConnectException - Non HTTP response message: Connect to 192.168.20.129:8080 [/192.168.20.129] failed: Connection timed out: connect

后来试了多次,换了个脚本,发现在同样的环境下,助攻机得到了正确的执行,这个是启用了10个线程顺序去执行,没有并发,因此说明环境应该是对的,可能出错在被测系统,这个有待排查

五. 总结

对linux的网络很不熟,因此在这一块绕了很多弯,后面需要加强

猜你喜欢

转载自www.cnblogs.com/my_captain/p/11743098.html