在使用Jmeter进行接口的性能测试时,由于Jmeter 是JAVA应用,对于CPU和内存的消耗比较大,所以,当需要模拟数以万计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误。为了让jmeter工具提供更大的负载能力,这时可以使用Jmeter提供的分布式功能来启动多台电脑来分压测试。

一、Jmeter分布式执行原理:

  1、Jmeter分布式测试时,选择其中一台作为控制机(Controller),其它机器做为代理机(Agent)。

  2、执行时,Controller会把脚本发送到每台Agent上,Agent 拿到脚本后开始执行,Agent执行时不需要启动Jmeter,只需要把jmeter-server.bat文件打开,它应该是通过命令行模式来执行的。

  3、执行后,Agent会把结果回传给Controller,Controller会收集所有Agent的信息并汇总。

 

二、代理机(Agent)配置:

1、Agent机上需要安装JDK、Jmeter,并且配置好环境变量。

2、打开“运行”,输入"cmd",打开运行面板,输入“ipconfig”,找到IP地址,例如是:192.168.8.149

jmeter压测监控工具 jmeter压测原理_jmeter压测监控工具

3、打开Jmeter/bin/jmeter.properties,找到”remote_hosts=127.0.0.1”,把这一行修改为”remote_hosts=192.168.8.149:1099,1099是端口号,可以随意自定义。

jmeter压测监控工具 jmeter压测原理_端口号_02

4、打开jmeter-server.bat文件,就设置完成了,等待控制机(Controller)启动。


三、控制机(Controller)配置:

1、Controller机上需要安装JDK、Jmeter,并且配置好环境变量。

2、打开“运行”,输入"cmd",打开运行面板,输入“ipconfig”,找到IP地址,例如是:192.168.8.174

  

jmeter压测监控工具 jmeter压测原理_Jmeter_03

3、打开Jmeter/bin/jmeter.properties,找到”remote_hosts=127.0.0.1”,把这一行修改为”remote_hosts=192.168.8.149:1099,192.168.8.174:1099,1099是端口号,可以随意自定义。如果有多台代理机,这里需要把所有的代理机的IP地址和端口号都加入进来。

jmeter压测监控工具 jmeter压测原理_端口号_04

 

4、打开jmeter-server.bat文件,设置完成了。

 

四、开始添加线程组和请求来运行查看结果:

1、打开jmeter.bat文件,添加线程组,编辑线程数,这里设置100个线程数,循环2次,就是一台机器发送100*2=200个请求。

jmeter压测监控工具 jmeter压测原理_控制机_05

 

2、添加HTTP请求,这里以访问淘宝为例。

jmeter压测监控工具 jmeter压测原理_IP_06

 

3、添加察看结果数和聚合报告,点击运行,可以选择远程启动或者远程全部启动,如果是点击远程启动,可以选择任意一台电脑来运行,如果是点击远程全部启动就会运行控制机和所有的代理机。

jmeter压测监控工具 jmeter压测原理_IP_07

 

4、这里以点击远程全部启动为例。运行结束后,查看聚合报告,每台电脑设置的线程数为200,这里一共是两台电脑,所以是200*2=400个线程数。

jmeter压测监控工具 jmeter压测原理_Jmeter_08


注意:

  • 所有客户端要在同一个子网中;
  • 控制机本身也可作为一台slaver,在remote_hosts后面加上127.0.0.1即可;
  • 控制机(master)和执行机(slaver)最好分开,由于master需要发送信息给slaver并且会接收slaver回传回来的测试数据,其自身有较大消耗,所以建议单独用一台机器作为master;
  • 参数文件:如果使用csv进行参数化,那么需要把参数文件在每台slaver上拷一份且路径需要设置成一样的;
  • 每台机器上安装的Jmeter版本和插件最好保持一致;
  • Jmeter远程启动测试中出现结果的响应数据为空,去掉#mode=Standard前面的#即可;
  • 脚本中设置的线程数会在每个压力机完整执行;
  • 也就是最终执行线程数=脚本设置的线程数*压力机数;