一. 背景
主机: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的网络很不熟,因此在这一块绕了很多弯,后面需要加强