一、分布式压测
1.分布式压测总体结构
选择一台机器作为调度机(master),其他的机器作为测试执行的执行机(slave),由Contorller通过命令行将测试脚本发给slave,然后slave执行测试,同时将测试结果发送给master。
2.为什么需要分布式压测
按照一般的压力机配置,jmeter的GUI模式下,最多支持300左右的模拟请求线程,再大的话,容易造成卡顿、无响应等情况,这是限于jmeter其本身的机制和硬件配置。有时候为了尽量模拟业务场景,需要模拟大量的并发请求,这个时候单台压力机就无法满足需求。针对这种情况,jmeter的解决方案是支持分布式压测,即将大量的模拟并发分配给多台压力机,来满足这种大流量的并发请求场景。
3.分布式压测相关配置
master配置(本次使用window系统)
jmeter.properties文件中:修改 remote_host=xxx.xxx.xx.xxx:xxx --(slave的IP端口号,多个slave地址用“,”隔开);修改server.rmi.ssl.disable = true。
slave配置(本次使用Mac系统)
jmeter.properties文件中:新增 server.rmi.localport=1099
4.运行
1)slave 启动 ./jmeter-server 运行成功显示 -- Created remote object: UnicastServerRef2 [liveRef: [endpoint:[x x x x x](local),objID:[xxxxxxxxxxx]]]
2) master 启动jmeter.bat,在run中选择Remote Start 中对应的slave地址运行
3)连接接成功,在slave中显示 -- Starting the test on host x x x x x @ Wed Nov 13 22:33:50 CST 2019
4)观察slave中bin目录下的jmeter-server.log查看日志;观察master中添加的聚合报告,看是否slave在运行,且将测试结果发送到master上
5)运行结束,slave显示 -- Finished the test on host x x x x x x x x @ Thu Nov 14 23:21:22 CST 2019
5.此次运行遇到的问题:
1)slave一直停留在Starting the test on host x x x x x @ Wed Nov 13 22:33:50 CST 2019;观察jmeter-server.log 日志显示拒绝链接,导致超时(java.rmi.ConnectException: Connection refused to host: xxx.xxx; nested exception is:java.net.ConnectException: Operation timed out.... )
解决方案
1)检查slave是否打开了防火墙,打开的话就将其关闭
2)master是否有安装虚拟机,虚拟机的网络设置成了“Bridge 并勾选 Replicate physical network IP address所以在controller机器的网络路由设置中,显示的网络连接为:VirtualBox Host-Oly Network;去网络和internet设置--》更改适配器选项将其禁用
3)master是否为双网卡,在我的电脑--〉属性-->设备管理器-->网络适配器中,将出下图以外的都禁用掉(本地网卡一般以Realtek PCIe GBE开头;无线网卡中间带有Wireles PCI字样)--(本次是用这个方法解决上面的问题)
二、简单介绍在no-gui模式下运行的命令
jmeter -n -t /usr/local/xxx.jmx -l xxx.jtl
-n的意思是没有图形化界面运行
-t的意思就是指定运行哪个脚本
-l的意思是运行结果保存哪个文件里面
如果是将脚本文件直接存储在bin目录下面则直接运行命令:jmeter -n -t xxx.jmx -l xxx.jtl