Jmeter分布式压测
一、原因
1、当你想并发很大的时候(比如3000)那么一台jmeter可能就不能胜任了,这时候就需要多台jmeter同时加压
2、当jmeter压力机安装在没有gui的linux上,又不想通过非gui的方式完成性能测试
二、原理
原理很简单就是找一台装有jmeter的机器当控制端,由这个控制端统一控制其它装有jmeter的机器作为代理,产生压力。如下图
三、安装jdk和jmeter
1、分别下载windows版本和linux版本的jdk,jdk版本1.8。windows点击安装包一路下一步即可。linux将tar.gz包上传linux解压缩并配置环境变量即可,参见 https://www.cnblogs.com/rslai/p/7859542.html
2、从 http://jmeter.apache.org/download_jmeter.cgi 下载最新jmeter安装包。windows系统的是zip压缩i文件,linux系统的是tar.gz压缩包。也是简单的解压缩即可。
四、配置controller
本文档使用1.10机器作为控制端,1.11作为代理,ip地址需要根据你的实际情况加以修改,如下图:
1、修改 jmeter.properties 配置文件
打开 C:\apache-jmeter-5.1.1\bin\jmeter.properties 配置文件(这是我的jmter解压位置,根据你的位置打开相应文件)
a)找到 server.rmi.ssl.disable 配置,将行首的注释删掉并改为true
server.rmi.ssl.disable=true
如果没有配置运行脚本的时候会报如下图错误
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地址,然后代理会在测试完成后主动连接控制端,以便将测试结果回传给控制端。此时如果有多块网卡就有可能连接失败,错误现象如下。
另外一个解决方式是将虚拟网卡或第二块网卡禁用,这样就不会出现连接不上控制端的问题但如果不小心启用的网卡还会出现此问题。
五、配置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配置信息比较麻烦。不配置如下图端口每次启动都改变
找到 server.rmi.ssl.disable 配置,将行首的注释删掉并改为true
server.rmi.ssl.disable=true
如果没有配置运行脚本的时候会报如下图错误
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只有一块网卡也无需设置。
另外一个方法是启动时候指定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、在控器器中打开脚本
2、点击 run->Remote Start 下的agent压测
压测完成后就可以看到报告了。
七、分布式压测中的参数文件问题
1、当脚本引用csv参数文件后不要使用绝对路径
2、将此csv文件上传到所有agent
csv文件需要上传到启动 jmeter-server时候的目录下,由于在profile文件中添加了 cd /home/apache-jmeter-5.1.1/bin 命令,所以将csv文件传到此目录 /home/apache-jmeter-5.1.1/bin 即可
参考文档:
https://blog.csdn.net/lt326030434/article/details/81065848
https://www.cnblogs.com/insane-Mr-Li/p/10713147.html
https://blog.csdn.net/weixin_38208401/article/details/78850157
https://www.cnblogs.com/bf-blackfish/p/11078411.html
https://www.cnblogs.com/insane-Mr-Li/p/10712155.html
https://blog.csdn.net/qq_35304570/article/details/81485799