分布式负载:
在使用jmeter进行性能测试的过程中,我们也可以通过分布式负载的方式来模拟更多的虚拟用户给服务器施压。
·前提:
·控制机:10.10.10.244
·负载机:10.10.10.171
·要保证控制机和负载机上的Jmeter和JDK版本的一致性。
·控制机和负载机必须在同一个网段中。
操作步骤:
第一步:启动负载机上的服务:Jmeter-server.bat/jmeter-server
默认情况下,负载机的服务端所使用的端口是1099。
如果要变更,可以通过修改负载机上的Jmeter的配置文件jmeter.properties来实现。
# RMI port to be used by the server (must start rmiregistry with same port)
#server_port=1099
PS:一旦配置文件修改,需要重启Jmeter-server.bat才会有效。
第二步:在控制机上添加负载机。
是通过修改控制机上的Jmeter的配置文件jmeter.properties来实现。
原始:
# Remote Hosts - comma delimited
remote_hosts=127.0.0.1
#remote_hosts=localhost:1099,localhost:2010
PS:remote_hosts=127.0.0.1这一行不要动。
然后自己添加一行来添加负载机,格式为:
remote_hosts=ip1:server_port1,ip2:server_port2...
比如说添加两台负载机:
remote_hosts=10.10.10.171:1099,10.10.10.188:20000
PS:一旦配置文件修改,需要重启Jmeter才会有效。
PS:在真正执行脚本之前,步骤一和步骤二没有先后要求,必须要保证第二步中所添加的负载机的IP和端口能够与最终的负载机保持一致。
第三步:在控制机上通过远程启动或者远程全部启动的方式去执行测试。
·远程启动:一次启动一台所选中的负载机。
·远程全部启动:一次性启动配置好的所有负载机。
·安全连接模式:从jmeter4.0版本开始,jmeter的分布式连接默认采用的就是基于ssl的连接。
操作有两种:
·去除ssl模式:
可以通过修改控制机和负载机的Jmeter的配置文件来实现。
#server.rmi.ssl.disable=false
将值改为true。
·使用SSL模式:
·第一步:在控制机上生成证书。
通过jmeter所提供的生成证书的脚本(bin目录)--create-rmi-keystore.bat
是否正确:y
密码:直接回车。
ps:生成的证书名叫rmi_keystore.jks,位于bin目录。
·第二步:分发证书rmi_keystore.jks。
将控制机上的证书分发到负载机上的jmeter的bin目录。
注意事项:
·分布式负载时,执行脚本的机器是负载机,因此要保证负载机能够和被测服务器进行通信。
这就意味着在进行分布式负载时,一旦脚本中涉及到脚本以外的资源(参数文件),则要求保证控制机和负载机上都要存在资源。
如果控制机和负载机的操作系统一致,我们建议使用绝对路径的方式去读取资源。
如果控制机和负载机的操作系统不一致,我们可以使用相对路径的方式去读取资源。
·控制机:当前路径是脚本所在的路径。
·负载机:当前路径是jmeter-server.bat所在路径,即jmeter的bin目录。
·远程全部启动时,脚本是分别、独立、同步在每一台负载机上执行。
这就意味着,我们在jmeter的GUI界面所设置的负载压力会变大。
最终服务器所承受的压力=设计压力×负载机的数量。
·默认情况下,每一台负载机上执行的线程数是一样的,如果要不一样,则需要对脚本进行处理。
1、脚本中的常量要用变量替代。
2、负载机可以通过修改Jmeter.properties文件指定变量的值,或者通过命令行-D来动态指定变量的值。
·默认情况下,分布式负载时,我们在控制机上是获取不到服务器返回的结果的,如果希望能够获取,则需要修改控制机的jmeter.properties,改变分布式负载的模式。
Remote batching configuration