1.jmeter分布式部署的背景
由于Jmeter本身的瓶颈,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误。要解决这个问题,可以使用分布式测试,运行多台机器运行所谓的Agent来分担JMeter自身的压力,并借此来获取更大的并发用户数,但是需要进行相关的一些修改。(jmeter由Java开发,耗内存、CPU,大量并发需要分布式)
2.部署方法
在所有运行的jmeter上,选择一台jmeter作为controller ,其他的的机器作为agent
步骤一:
在controller机器的jmeter的bin目录下,编辑jmeter.properties 文件,编辑内容如下:
#127.0.0.1代表将本机也作为一个agent;1099为jmeter的controller 和agent 之间进行通信的默认RMI端口号
remote_hosts=192.168.72.134:1099,192.168.72.1:1099,127.0.0.1:1099
server.rmi.ssl.disable=true
步骤二:
启动作为agent的所有jmeter机器
启动命令:
[root@localhost jmeter]# ./bin/jmeter-server -Djava.rmi.server.hostname=192.168.72.134
步骤三:
在controller机器上执行jmeter在控制机执行分布式命令
#-R指定从机IP
jmeter -n -t mysql.jmx -R 192.168.72.134,192.168.72.1,127.0.0.1 -l mysql.jtl
#启动所有的从机IP
jmeter -n -t mysql.jmx -r -l mysql.jtl
3.报错解决
报错一:
有些资料启动作为agent的jmeter机器,直接执行./bin/jmeter-server
报错信息如下:
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[127.0.0.1:51186](local),objID:[-5043762f:16bd6c15be6:-7fff, 4507474015469481845]]]
Server failed to start: java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address.
An error occurred: Cannot start. localhost.localdomain is a loopback address.
解决方法:
启动jmeter的agent机器指定本地的IP地址
[root@localhost jmeter]# ./bin/jmeter-server -Djava.rmi.server.hostname=192.168.72.134
报错二:
controller指定agent机器启动时报错
报错信息:
[root@localhost jmx]# jmeter -n -t mysql.jmx -R 192.168.72.134 -l mysql.jtl
Creating summariser <summary>
Created the tree successfully using mysql.jmx
Configuring remote engine: 192.168.72.134
Exception creating connection to: 192.168.72.134; nested exception is:
java.net.NoRouteToHostException: No route to host (Host unreachable)
Failed to configure 192.168.72.134
Stopping remote engines
Remote engines have been stopped
Error in NonGUIDriver java.lang.RuntimeException: Following remote engines could not be configured:[192.168.72.134]
解决方法:
尝试telnet agent机器的1099端口,发现无法ping通
[root@localhost jmx]# telnet 192.168.72.134 1099
Trying 192.168.72.134…
telnet: connect to address 192.168.72.134: No route to host
原因:此时agent的防火墙没有关闭
关闭agent的防火墙即可