jemter本身是开源的。自己软件内存和性能是有限制的,再加上电脑的CPU或者内存原因,有时候压力测试时模拟的线程数过多(几千几万)会导致软件卡死或者反应很慢(内存溢出)。单纯只使用jemeter来进行压测时,最好是使用分布式压测,就是一台master调度机和多台slave执行机。在执行时调度机会将请求脚本发给每一个执行机,执行机就会运行脚本,将结果传给调度机。
注意事项:
1、调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以master自身会有消耗,所以最好是单独用一台机器作为master调度机。
2、参数文件:如果使用参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。
3、每台机器上安装的Jmeter版本和插件最好都一致,否则会出一些意外的问题。
我在实际过程中使用这种方法,也使用过阿里云的PTS(要花钱),在本地的Jmeter上调试好了将脚本和参数文件等上传到阿里云的PTS-Jmeter原生压测中就可以了,不过不同价格套餐的会限制上传的文件数量。
一、Jmeter分布式执行原理:
1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,是通过命令行模式执行的。
3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。
二、执行机(slave)配置:
1、slave机上需要安装Jmeter的,并且版本或者插件一定要和master上的一致。
2、添加环境变量:JMETER_HOME=D:\work\apache-jmeter-4.0,此处为自己电脑上Jmeter的路径。
3、启动bin目录下的:jmeter-server.bat.
4、启动后IP和端口会在master里配置时用到。就是上图框框里的。IP就是slave机器IP,端口默认是1099,端口也可以自定义,这里我自定义为1888。
5、多台slave的话,就在每台slave上都执行步骤1-4即可。
三、自定义端口:
1、slave:在slave机的Jmeter的bin目录下,找到jmeter.properties文件,修改如下两个配置项,比如我这里修改为1888:
server_port=1888
server.rmi.localport=1888
2、启动slave机上的jmeter-server.bat
3、master:修改master机器的jmeter.properties文件:
remote_hosts=192.168.3.103:1888
4、重启jmeter.bat,选择运行-->远程启动:就可以看到端口已经变了
四、调度机(master)配置:
1、脚本:先录制或者自己配置请求。
2、找到Jmeter的bin目录下jmeter.properties文件,修改如下配置,IP和Port是slave机的IP以及自定义的端口:
remote_hosts=192.168.3.103:1888
如果有多台slave,每个端口后面就用","隔开。比如:192.168.3.103:1888,192.168.3.120:1009
3、打开Jmeter,选择运行,有远程启动、远程全部启动两个选项,如果想要指定某些执行机,就选择远程启动,点击指定的IP。
4、我这里只有一个,所以选择远程启动和远程全部启动是一样的;选择远程启动-->192.168.3.103:1888