Jmeter使用篇(十九) : Jmeter多机压测方法

一、Jmeter多机压测

Jmeter 是java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误。为了让jmeter工具提供更大的负载能力,jmeter短小精悍一有了使用多台机器同时产生负载的机制。

那么,是如何实现多台负载机同时运行的呢?当然不会多个人坐在多台负载机面前,一喊开始,大家同时启动jmeter。这种方式很笨,也很难达到真正的同步。其实,我们通过单个jmeter 客户端就可以控制多个远程的jmeter服务器,使它们同步的对服务器进行压力测试。

通过远程运行jmeter,测试人员可以跨越多台低端计算机复制测试,这样就可以模拟一个比较大的服务器压力,一个jmeter客户端实例,理论上可以控制任意多的远程jmeter实例,并通过他们收集测试数据。这样一样,就有了如下特性:

*   保存测试采样数据到本地机器

*   通过单台机器管理多个jmeter执行引擎。

*   没有必要将测试计划复制到每一台机器,jmeter GUI客户端会将它发往每一台jmeter服务器。

*   每一台jmeter远程服务器都执行相同的测试计划,jmeter不会在执行期间做负载均衡,每一台服务器都会完整地运行测试计划。

在1.4G Hz~3GHz 的CPU 、1GB 内存的 JMeter 客户端上,可以处理线程 100~300。但是Web Service 例外。XML处理是 CPU 运算密集的,会迅速消耗掉所有的CPU 。一般来说,以XML技术为核心的应用系统,其性能将是普通Web 应用的 10%~25% 。另外,如果所有负载由一台机器产生,网卡和交换机端口都可能产生瓶颈,所以一个JMeter 客户端线程数不应超过 100 。 

采用JMeter 远程模式并不会比独立运行相同数目的非GUI 测试更耗费资源。但是,如果使用大量的JMeter 远程服务器,可能会导致客户端过载,或者网络连接发生拥塞。

二、Jmeter多机压测步骤

1、在远程终端Jmeter中找到jmeterserver.bat文件,双击打开,这样就开启了远程连接(远程终端开启jmeterserver.bat后,默认连接端口为1099)

 2、查看远程终端的主机地址,用cmdipconfig进行查看

3、查到远程主机地址以及默认的端口1099后,在本地机器上进行网络连接测试,即telnet+远程终端地址+端口,看是否连通

4、本地与远程主机连接测试通畅后,找到本机的jmeter.properties文件进行配置修改

5、jmeter.properties文件进行配置修改,配置完毕后进行保存

 6、打开本地jmeter,在运行–远程启动中就可以看到刚才配置的远程地址和端口

 注意:远程主机启动之后,启动里面的主机地址:端口则会变灰色,表示已启动

 7、配置完毕后就可以直接执行

三、Jmeter多机压测常见问题以及解决方法

1、在Controller端上控制某台机器Run,提示”Bad call to remote host”。

解决方法:检查被控制机器上的jmeter-server有没有启动,或者JMeter.properties中remote_hosts的配置错误。

2、Agent机器启动Jmeter_server.bat时,后台提示:”could not find ApacheJmeter_core.jar”

解决方法:确定在Agent机器安装jdk,并设置环境变量

3、远程启动时,报错:

 

ERROR – jmeter.gui.action.RemoteStart: Failed to initialise remote engine java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:

java.net.ConnectException: Connection refused: connect

at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)

at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)

at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)

at sun.rmi.server.UnicastRef.newCall(Unknown Source)

at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)

at java.rmi.Naming.lookup(Unknown Source)

at org.apache.jmeter.engine.ClientJMeterEngine.getEngine(ClientJMeterEngine.java:54)

at org.apache.jmeter.engine.ClientJMeterEngine.<init>(ClientJMeterEngine.java:67)

at org.apache.jmeter.gui.action.RemoteStart.doRemoteInit(RemoteStart.java:180)

at org.apache.jmeter.gui.action.RemoteStart.doAction(RemoteStart.java:80)

at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:81)

这个问题终于被我解决了,其实原因好简单呀。只要将本机的server.bat执行即可。

注意:要是在配置的地方写了127.0.0.1 的话 就要开本机的 sever.bat. 不写的话 就不用开了

4、查看1099端口是否被占用

netstat -ano | findstr “1099”

tasklist | findstr “1099”

5、需要检查防火墙有没有关闭,没有关闭防火墙是无法进行多机压测的


版权声明:本文为BearStarX原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。