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地址
---------------------------------------------------------------------
"记录"是见证成长;"成长"则意味着蜕变;“变",创造无限可能。
欢迎关注个人微信公众号,一起进步!扫描下方二维码即可
公众号回复指定关键字可获得视频教程资料
![](https://www.cnblogs.com/images/cnblogs_com/wysk/1536678/t_%E6%89%AB%E7%A0%81_%E6%90%9C%E7%B4%A2%E8%81%94%E5%90%88%E4%BC%A0%E6%92%AD%E6%A0%B7%E5%BC%8F-%E6%A0%87%E5%87%86%E8%89%B2%E7%89%88.png)