Jmeter分布式性能测试
一、背景
在使用Jmeter进行接口的性能测试时,由于Jmeter 是JAVA应用,对于CPU和内存的消耗比较大,所以,当需要模拟数以
万计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误。为了让jmeter
工具提供更大的负载能力,这时可以使用Jmeter提供的分布式功能来启动多台电脑来分压测试。
二、Jmeter分布式执行原理
1、Jmeter分布式测试时,选择其中一台作为调度机(Master),其它机器做为执行机(Slave)。
2、执行时,调度机(Master)会把脚本发送到每台执行机(Slave),执行机(Slave) 拿到脚本后开始执行,执行机(Slave)执
行时不需要启动Jmeter,只需要打开jmeter-server.bat文件,它是通过命令行模式来执行的。
3、执行后,执行机(Slave)会把结果回传给调度机(Master),调度机(Master)收集所有执行机(Slave)的信息并进行汇总。
三、执行机(Slave)配置:
1、执行机(Slave)上需要安装JDK、Jmeter,并且配置好环境变量。
2、打开jmeter-server.bat文件。注意打开界面上的IP、Port,也就是执行机(Slave)的IP和对应分配给Jmeter的端口,
此IP、Port会配置到调度机(Master)的remote_hosts中。
四、调度机(Master)配置
1、调度机(Master)上需要安装JDK、Jmeter,并且配置好环境变量。
2、打开jmeter.properties文件,找到”remote_hosts=127.0.0.1”行,把这一行配置上远程执行机的IP:Port。
如果有多执行机,需要把所有执行机的IP地址和端口号都加入进来,多台执行机IP:端口之间用英文逗号分隔。
3、配置完成后重启Jmeter
五、分布式运行
1、如果只想在本机运行,则点击“启动”,不使用调度机
2、如果只想在某一台调度机上运行,则点击“远程启动”,可以选择任意一台执行机来运行
3、如果想在所有调度机上运行,则点击“远程全部启动”,如果是点击
4、我们可以从Slave机器上cmd窗口打印的日志,看出分布式场景是否执行成功
负载:jmeter分布式控制过程中,各个执行机启动的线程数等于调度机线程组中配置的线程数,如调度机配置的线程数是
20,有3台调度机、则总负载为:20*3
六、注意事项
1、确保调度机、执行机jmeter,java版本一致,不同版本可能会存在协同问题
2、Controller、Agent需要关闭防火墙。
3、调度机、执行局网络需要保持在同一个局域网,可以ping通
4、如果测试用到了外部数据文件,那么请注意这些文件不会被JMeter客户端分发,因此测试人员需要确保每台执行机上
都保存了这些数据文件,并且文件路径正确
5、修改了jmeter的配置,jmeter需要重启才能生效
6、有时候用作执行机的机器太少,仍不能满足需要,则需要将调度机的电脑也当做执行机,则同样需要修改
jmeter.properties文件,将调度机的IP写入到remote_hosts。同时,这个时候需要先打开调度机(Master)电脑
中%JMeter_home%/bin目录下的jmeter-server.bat,然后再打开jmeter.bat。此时,进入Run下的“远程启动”菜单,
可以看到调度机也作为远程机器进行运行。非必要情况下不建议将调度机作为执行机使用,因为任务调度、收集结果
信息并进行汇总也需要消耗系统资源。
七、其它问题
1.启动jmeter-server.bat报错:An error occurred: Listen failed on port: 0; nested exception is:
java.io.FileNotFoundException:rmi_keystore.jks (系统找不到指定的文件)。
解决方案:打开jmeter.properties文件,修改server.rmi.ssl.disable行配置,将属性值false–>true,并取消该语句的注释,
保存配置调整,重新启动jmeter-server.bat即可恢复正常