因为jmeter在做性能测试的时候,我们理想状态下,可能想让线程组跑几千上万个线程,一起向服务器施加压力,看服务器能不能承受得住,但是每台电脑都有自己的并发上限,这个和当前电脑的配置有关系,如果当前电脑的配置比较高,可能能虚拟出更多的虚拟用户出来,如果配置不高,可能就不能虚拟出更多的用户,因为在虚拟用户的时候,需要分配电脑上的资源,去创造那么多虚拟的人出来,需要消耗很大的资源,达到一定的数量之后,电脑就虚拟不出来那么多的人
比如说电脑最大只能虚拟500个人,想要测试600人那就测不出来了,这种时候就需要用到分布式测试
分布式
分布式是分摊自身机器产生虚拟用户的压力(自身机器由于配置的原因最多只能产生500个虚拟并发用户,其他用户用另外机器一起分工合作,分摊自身机器的压力,最终实现产生800个或者1000个并发用户向服务器发起请求的目的,是分摊自己的压力,并不是减轻对服务器的压力)
集群
集群是我们的服务器有多台机器组成在一起,集合在一起向外来提供服务,内部就是一个集群,是分摊服务器自身处理能力的方式
服务器分摊压力的一种方式
分布式
主控机器控制5台控制机向服务器发起请求,服务器收到请求之后将处理的结果分发给这5台机器,5台机器再把结果给到控制的机器,这样就实现了把自身压力分摊到5台机器上一起向服务器造成压力
将自身的压力分摊到5台机器上。向服务器发起请求,然后服务器处理完之后返回结果到五台服务器并且返回给master(监控机器)
保持一致:jdk一致,jmeter版本一致(本机zip)脚本最好使放到jmeter的zip
网络:同一个局域网
例如:自己电脑+同事电脑需要一致性
需要使用相对路径:csv的文件与jmx文件路径一致
把本地jmeter根目录打包成zip发送给你的助攻机器上(这样可以保证jmeter的一致性)
也可以使用自己电脑上的虚拟机,只要网络是net网络动态分配(不是固定配置的网络)就可以,确保虚拟机和本机是在同一个网络下
可以查看虚拟机的网段和自身机器是不是在一起的(使用ipconfig)
助攻机器上先要用jmeter确认版本一致
进入到助攻机器上,在jmeter文件夹的bin文件夹下找到属性配置文件properties
1.首先将语言改为中文zh_CN
2.在配置文件中找到server_port,可以看到默认端口,可以自己去定义这个端口配置一下。例如配置为8887
3.在配置文件中找到server.rmi.port,可以看到默认端口,将这个端口改为和server_port一样的为8887
4.在配置文件中找到server.rmi.ssl.disable,默认为false,需要将它改为true(之前是ssl加密传输认证可用,现在改为不可用)
5.保存配置文件properties
6.在助攻机上确认jdk,如果没有就需要进行安装jdk
7.确保助攻机器的防火墙是否关闭(防火墙一定要能够正常通过端口)服务通过不能防火墙就不能对外提供服务,可以临时关闭防火墙systemctl stop firewalld.service
助攻机器如果不关闭防火墙就可以开启对应的端口(server_port)不然服务出不来无法访问服务
8.启动服务 Windows下 :jmeter-server.bat -Djava.rmi.server.hostname=助攻机ip ; 如果是linux系统jmeter-server -Djava.rmi.server.hostname=助攻机ip
这个命令需要在jmeter的bin文件夹下执行
在实际使用中不要用虚拟机,相当于还是自身电脑的资源
运行之后回到控制机
进入到控制机器上,在jmeter文件夹的bin文件夹下找到属性配置文件properties
1.在配置文件中找到remote_hosts。看到默认ip为127.0.0.1,为本机,要将它修改为助攻机器的ip地址192.168.0.122:端口号(这个端口号为刚刚在助攻机中填写的端口8887)如果有多台助攻机,可以配置端口不一致也可以一致。例如有两个助攻机,那这时配置为192.168.0.122:8887,192.168.0.124:8886
2.在配置文件中找到server.rmi.ssl.disable,默认为false,需要将它改为true(之前是ssl加密传输认证可用,现在改为不可用)
3.在配置文件中找到mode,可以直接取消注释,也可以添加mode=Standard(用于显示监视结果,如果没有配置,将看不到助攻机器的实时结果)
4.重启jmeter
在jmeter界面的运行--远程启动可以看到配置内容
1,在启动助攻机的机器后,在主机上运行命令看能不能连接助攻机(网络能不能通)
telnet 助攻机ip:端口
2,在主机的jmeter下打开对应的线程组,在运行菜单下点击远程启动,可以看到助攻机的ip和端口
点击这个ip
可以看到命令行窗口在执行
这个时候是助攻的机器在向服务器发起请求,主控机器并没有向服务器发起请求
主控机器上可以看到助攻机器发起请求之后的各种数据
修改主机上的线程组场景,助攻机器的运行场景也会变化
修改主机上的脚本,助攻机器的也会变化
服务器收到的线程数是助攻机器的总和
只能按照平均值来的,就是现在线程总数为1000,每台机器线程数为500
修改主机上的线程组,助攻机器进行执行,但是助攻机器本身的线程组没有变化
active 活跃线程数 这个数据是有有几台机器就有几条
其他两个响应时间和tps只有一条
如果要主机和助攻机同事发起请求,就要在主机中配置成和助攻机器一样的
在主机配置中,助攻机器ip就是本身的ip地址所以用逗号分开,加上自身的ip地址
做分布式的原因:
不可能无限量的区虚拟出虚拟用户,需要分布式来分摊压力(其他人一起进行分布式)