使用JMeter单机对服务器进行压测时,经常会因为本机资源有限(端口)导致测试中出现异常,进而让测试结果出现非常大的偏差。为了解决这个问题,JMeter提供了分布式性能测试的功能。
JMeter分布式性能测试的原理可参考《Jmeter分布式性能测试详解(4)分布式远程测试》,这里就不多说了。
准备工作
首先,我们需要准备相关的测试机器。分布式压测需要准备一台控制机,两台以上测试机。如果条件允许,建议控制主机和测试机不在一台机器上。
控制主机配置
在JMeter安装目录下的bin目录下,找到配置文件jmeter.properties,主要配置三个地方。
#---------------------------------------------------------------------------
# Remote hosts and RMI configuration
#---------------------------------------------------------------------------# Remote Hosts - comma delimited ,192.168.25.64
#remote_hosts=127.0.0.1#测试节点机
remote_hosts=192.168.0.184,192.168.0.235# RMI port to be used by the server (must start rmiregistry with same port) Default Port 1099
#对外端口
#server_port=1099# Set this if you don't want to use SSL for RMI
#取消SSL连接机制
server.rmi.ssl.disable=true
注意: 如果测试节点机的服务端口不是JMeter默认的1099,则需要在remote_hosts里面的ip加上对应的端口号,格式为
remote_hosts=ip1:port,ip2:port2
修改服务端口也很简单,即将server_port=1099中的1099改为其它数字即可。
server_port=21000
测试节点机配置
测试节点机基本没有配置,只有当需要变更端口才需要进行操作。变更端口方法见控制机配置。
启动测试
首先启动各测试节点的JMeter服务,即通过点击jmeter-server.bat来启动服务。
其次,在主控机上打开JMeter操作界面,引入测试用例。在菜单栏找到运行(Run)菜单,查看Remote Start菜单里面有没有包含配置好的测试节点。如下图
先点击单个测试节点进行测试,看看是否能正常启动测试节点。如果出现Start the test on host...的信息,表示控制机已正常启动测试节点,测试开始。
此时,我们观察聚合报告、汇总报告、测试结果树,都已正常开始展示测试结果数据。
在分布式测试中,需要注意以下几点:
1、主控机与测试节点必须能够互访
因为主控机与测试节点会进行数据交互,如果不能互访则会出现异常。
这里主要关注本机防火墙是否关闭或配置了端口策略(默认端口为1099);不在一个网段的机器,需要确定是否能互ping。
2、各测试机JMeter的版本必须一致
3、各测试机JDK的版本必须一致
4、如果测试中使用了外部参数文件,如csv参数文件,需要保证各测试机csv文件路径一致。
分布式压测其实很简单的,上手试试很快就能搞定,如果测试中出现一些搞不懂的异常,先重启各测试节点服务试试。