问题描述:

  • 需要使用jmeter模拟大并发的情况时,单台压测机不能满足需求,可进行分布式压测。
  • 简单来说就是,多台机器同时安装jmeter,选择一台机器作为调度机,其他作为压力机。进行相应的配置后,就可以用调度机操控压力机发起请求。

如何配置(以Windows为例):

  • 1.压力机:
    • 1)执行当前压力机下jmeter安装包bin目录下的jmeter-server的批处理文件,此时该机器上启动一个java进程,并随机分配端口,监听来自调度机的请求。
    • 但是这里我们需要配置成固定端口方式,否则调度机远程启动压力机时,会报错。
    • 配置固定端口:打开bin目录下的jmeter.properties文件,更改server_port、server.rmi.localport的端口为要配置的端口。
  • 2.调度机:
    • 打开jmeter安装包bin目录下的jmeter.properties文件,更改remote_hosts为,压力机ip及执行jmeter-server后启动的端口。
  • 开始测试:
    • 1.调度机正常配置好要测试的地址、参数、监听器等后,选择远程启动,就可以用刚刚配置好的压力机,进行压测了。

补充Linux上的配置:

  • 1、启动slave server 命令:jmeter-server -Djava.rmi.sver.hostname=192.168.0.64

遇到的问题及解决:

问题一:

  • jmeter4.0,启动slave报错 “java.io.FileNotFoundException: rmi_keystore.jks (没有那个文件或目录)”
  • 解决:
    • 方法一:slave的jmeter.properties中,设置“server.rmi.ssl.disable=true”
      • 原因:jmeter4.0以上的版本,默认启用RMI连接的安全通信,需要创建密钥库。所以将SSL禁用即可。
    • 方法二:手动生成秘钥和证书。执行create-rmi-keystore.bat(Windows适用)或create-rmi-keystore.sh(Linux适用)

问题二:

  • 调度机远程调用slave时,连接超时。查看slave上的jmeter-server.log,发现是与调度机的虚拟机网卡连接超时。
    • 解决:在调度机的jmeter.bat中修改配置指定客户端的网卡ip.
    • 增加配置项:set rmi_host=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx
    • 修改配置项:set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %CLASS_UNLOAD% %DDRAW% %rmi_host%

注意事项:

1、master、slave的时间要同步,否则tps结果误差较大。