Jmeter分布式测试

JMeter的场景运行方式有GUI运行,也有非GUI运行,有本地运行,也有远程运行,远程运行就是一台JMeter控制机控制多台远程机器来产生负载。
1、背景
 Jmeter 是java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误。为了让jmeter工具提供更大的负载能力,jmeter短小精悍一有了使用多台机器同时产生负载的机制。
 
  那么如何实现多台负载机同时运行的呢?当然不会多个人坐在多台负载机面前,一喊开始,大家同时启动jmeter。这种方式很笨,也很难达到真正的同步。其实,我们通过单个jmeter 客户端就可以控制多个远程的jmeter服务器,使它们同步的对服务器进行压力测试(分布式测试);
 
   
原理:通过一个jmeter控制器,三台jmeter的Agent,通过这三台压力机去压被测系统。
 
2、步骤
a、关闭防火墙;(控制面板-->(系统和安全)-->window防火墙)
 
b、在所有运行的jmeter并作为负载生成器的机器上安装jmeter,并确定其中一台机器为主的controller,其他的机器作为Agent,然后运行所有agent机器上的jmeter-server文件【在运行之前要先进行第三步的设置】
  如ABC三台机器,如果B(IP为192.168.0.11)和C(IP为192.168.0.12)作为负载(即压力机 Agent),A为主机器,把ABC三台机器都安装jmeter,在压力机(BC)运行jmeter-server文件
注意:Agent机器上必须安装JDK和配置环境变量,各个机器上安装的版本保持一致
 
c、在controller机器的jmeter的bin目录下,找到jmeter.properties文件:打开--找到remote_hosts,默认情况下如下所示:
   
 
将原来的注释掉,标注处改成压力机的IP,后面的端口号看启动jmeter-server的窗口的显示,一般情况下为默认。设置好后保存,在重启JMeter就好了;
 
d、启动controller机子上的jmeter应用,如下图:选择菜单”运行“--》远程启动,来分别启动agent,也可以直接选择"远程全部启动'来将所有的agent启动;
     
注意:如果远程运行的脚本有参数化,脚本有依赖的包时,需要手工把这些参数文件依赖的包拷贝到远程机器上。
 
本地的Jmeter控制器也可以当做Agent来测试,如下设置:
有时候用作dialing的机器太少,仍不能满足需要,则需要将作为控制器的电脑也当做Agent,则同样需要修改JMeter.properties文件,将Controller的IP地址写入。
同时需要先打开Controller电脑中的JMeter下bin目录下的jmeter-server.bat,然后在打开Jmeter.bat,此时进入run->Remote Start菜单,可以看到Controller也作为远程机器进行运行。
 
3、常见问题
1、controller机器上安装的JDK和JMeter上的要保持一致;
 
2、Agent机器启动jmeter-server.bat时,后台提示could not find ApacheJmeter_core.jar
  解决方法:这个是开始没有找到ApacheJmeter_core.jar,如果不希望看到Could not find 字样,需要添加环境变量JMETER_HOME,路径为bin目录的上一级目录,这样启动jmeter-server服务时,就不会看到这个提示;
 
3、Jmeter分布式控制过程中,各个Agent启动的线程数等于线程组中的配置
 
4、各个机器的IP地址不要在同一网段
  如何检查:cmd -->输入ping IP地址
 
posted @ 2017-09-21 17:02  知了.Test  阅读(805)  评论(0编辑  收藏  举报