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中。
Jmeter分布式性能测试
四、调度机(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分布式性能测试
负载: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即可恢复正常