Jmeter分布式压测

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jmeter分布式压测相关的知识,希望对你有一定的参考价值。

 一、原因

  1、当你想并发很大的时候(比如3000)那么一台jmeter可能就不能胜任了,这时候就需要多台jmeter同时加压

  2、当jmeter压力机安装在没有gui的linux上,又不想通过非gui的方式完成性能测试

二、原理

  原理很简单就是找一台装有jmeter的机器当控制端,由这个控制端统一控制其它装有jmeter的机器作为代理,产生压力。如下图

Jmeter分布式压测_javascript

三、安装jdk和jmeter

1、分别下载windows版本和linux版本的jdk,jdk版本1.8。windows点击安装包一路下一步即可。linux将tar.gz包上传linux解压缩并配置环境变量即可,参见

2、从 ​​http://jmeter.apache.org/download_jmeter.cgi​​ 下载最新jmeter安装包。windows系统的是zip压缩i文件,linux系统的是tar.gz压缩包。也是简单的解压缩即可。 

四、配置controller

本文档使用1.10机器作为控制端,1.11作为代理,ip地址需要根据你的实际情况加以修改,如下图:

 

Jmeter分布式压测_javascript_02

1、修改 jmeter.properties 配置文件

  打开 C:\\apache-jmeter-5.1.1\\bin\\jmeter.properties 配置文件(这是我的jmter解压位置,根据你的位置打开相应文件)

  a)找到 server.rmi.ssl.disable 配置,将行首的注释删掉并改为true 

server.rmi.ssl.disable=true

  如果没有配置运行脚本的时候会报如下图错误

Jmeter分布式压测_linux_03

   b)配置代理地址,找到 remote_hosts 并配置如下

    其中1.11就是一台代理ip地址1099是在代理上启动的jmeter-server的监听端口。每台代理以“,”号分割

remote_hosts=127.0.0.1,192.168.1.11:1099,192.168.1.12:1099,192.168.1.13:1099,192.168.1.10:1099

  c)配置代理连接控制端ip地址

  打开 C:\\apache-jmeter-5.1.1\\bin\\jmeter-server.bat 文件,添加如下内容,添加位置无所谓只要在 set ARGS= 前即可,其中 192.168.1.10就是你的控制端的ip地址

set rmi_host=-Djava.rmi.server.hostname=192.168.1.10

  修改 set ARGS= 配置,原来配置信息如下

set ARGS=%JAVA9_OPTS% %DUMP% %HEAP% %VERBOSE_GC% %GC_ALGO% %DDRAW% %SYSTEM_PROPS% %JMETER_LANGUAGE% %RUN_IN_DOCKER%

  在最后添加  %rmi_host%,添加后如下

set ARGS=%JAVA9_OPTS% %DUMP% %HEAP% %VERBOSE_GC% %GC_ALGO% %DDRAW% %SYSTEM_PROPS% %JMETER_LANGUAGE% %RUN_IN_DOCKER% %rmi_host%

  以上配置非必须。如果你的控制端只有一块网卡并且没有安装虚拟机等软件就可以不用配置。

  因为在控制端连接代理后会通知代理控制端的ip地址,然后代理会在测试完成后主动连接控制端,以便将测试结果回传给控制端。此时如果有多块网卡就有可能连接失败,错误现象如下。

  另外一个解决方式是将虚拟网卡或第二块网卡禁用,这样就不会出现连接不上控制端的问题但如果不小心启用的网卡还会出现此问题。

Jmeter分布式压测_linux_04

 

Jmeter分布式压测_javascript_05

 

Jmeter分布式压测_javascript_06

五、配置agent

1、修改 jmeter.properties 配置文件

根据你安装的目录修改
vi /home/apache-jmeter-5.1.1/bin/jmeter.properties

1、将原来的
#server_port=1099

前边的注释去掉改为
server_port=1099

2、将原来的
#server.rmi.localport=4000

前边的注释去掉改为
server.rmi.localport=1099

  这里的端口号如果不改也可以,但jmter每次启动都会换一个端口,这样每次都要修改controller的remote_hosts配置信息比较麻烦。不配置如下图端口每次启动都改变

Jmeter分布式压测_apache_07

  找到 server.rmi.ssl.disable 配置,将行首的注释删掉并改为true

server.rmi.ssl.disable=true

  如果没有配置运行脚本的时候会报如下图错误

Jmeter分布式压测_apache_08

2、修改 jmeter-server 启动脚本

vi jmeter-server


#RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx

改为
RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.1.11

  改后如下图,同样如果linux只有一块网卡也无需设置。

Jmeter分布式压测_linux_09

  另外一个方法是启动时候指定ip地址如下

./jmeter-server   -D java.rmi.server.hostname=192.168.1.11

 2、启动 jmeter-server

linux上执行 ./jmeter-server 命令windows上双击 jmeter-server.bat 即可,启动成功后如下

[root@bj-zd2f-vm-ceshi-test-loadrunner1 bin]# ./jmeter-server 
Using local port: 1099
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.1.11:1099](local),objID:[258e0404:16db9c33fc1:-7fff, -5488498502529841046]]]

使用上面命令启动 jmeter-server虽然可以使用但只要关闭xshell后就不能用了,可以使用如下命令运行在后台

nohup ./jmeter-server &

如果重新启动服务器那还要每台服务器重新运行 jmeter-server,可以直接将启动命令放到profile文件中这样jmeter-server会跟随系统启动而运行

打开profile文件
vi /etc/profile

在profile最后添加运行jmeter-server命令
cd /home/apache-jmeter-5.1.1/bin
nohup /home/apache-jmeter-5.1.1/bin/jmeter-server &

保存profile在命令行执行如下命令,使profile配置生效
source /etc/profile

六、分布式压测

 1、在控器器中打开脚本

Jmeter分布式压测_linux_10

 2、点击 run->Remote Start 下的agent压测

 

Jmeter分布式压测_linux_11

压测完成后就可以看到报告了。

 

Jmeter分布式压测_javascript_12

七、分布式压测中的参数文件问题

1、当脚本引用csv参数文件后不要使用绝对路径

Jmeter分布式压测_linux_13

2、将此csv文件上传到所有agent

csv文件需要上传到启动 jmeter-server时候的目录下,由于在profile文件中添加了 cd /home/apache-jmeter-5.1.1/bin 命令,所以将csv文件传到此目录 /home/apache-jmeter-5.1.1/bin 即可

 

 

 

 

 

 



以上是关于Jmeter分布式压测的主要内容,如果未能解决你的问题,请参考以下文章

jmeter 分布式压测配置Linux

jmeter分布式压测

jmeter压测和抓包

Jmeter4.0分布式压测配置过程

jmeter分布式压测实践及踩坑记录(linux压力机)

jmeter 多接口压测中出现取值 EOF,且压力机不断报文件io错误的现象