zoukankan      html  css  js  c++  java
  • Jmeter分布式测试

    Jmeter分布式测试

     

      在使用Jmeter进行性能测试时,如果并发数比较大(比如最近项目需要支持1000并发),单台电脑的配置(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能。

    一、Jmeter分布式执行原理:

      1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。

      2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,我理解它应该是通过命令行模式执行的。

      3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。

    二、执行机(slave)配置:

      1、slave机上需要安装Jmeter,具体如何安装这里不详细介绍了。

      2、添加环境变量:JMETER_HOME=D:B_TOOLSapache-jmeter-2.13,此处为你Jmeter的路径

      3、启动bin目录下的:jmeter-server.bat,启动成功如下图:

      

      4、上图上标红的IP和端口会在master里配置时用到。IP就是slave机器IP,端口默认是1099,端口也可以自定义,这里我自定义为1000,这个后面会讲。 

      5、多台slave的话,重复1~4步骤就好。  

    三、调度机(master)配置:

      1、脚本:简单的一个访问百度的脚本: 

      

      2、找到Jmeter的bin目录下jmeter.properties文件,修改如下配置,IP和Port是slave机的IP以及自定义的端口(这里端口我自定义为100,后面会讲如何自定义):

            remote_hosts=10.13.223.202:1000,10.13.225.12:1000

        多台slave之前用","隔开,我这配置了2台,可以看到标红的这个就是上面截图slave的IP和Port.

      3、打开Jmeter,选择运行,有运程启动、运程全部启动两个选项:

      

      4、选择远程启动-->10.13.225.12:1000

        a) master结果,这里我只启动了10.13.225.12:1000这一台slave,所以只有一个结果(线程数和循环次数都是1):

      

        b) slave控制台信息:

       

      5、选择远程启动-->远程全部启动:

        a) master结果,全部启动,我配置了2台slave,所以有两次执行结果:

      

      

    四、自定义端口:

      上面其实已经实现了Jmeter的分布式测试,这部分主要介绍下如何自定义slave端口:

      1、slave:在slave机的Jmeter的bin目录下,找到jmeter.properties文件,修改如下两个配置项,比如我这里修改为1888:

          server_port=1888

          server.rmi.localport=1888

      2、启动slave机上的jmeter-server.bat,如下图,端口已经修改为:1888

      

      3、master:修改master机器的jmeter.properties文件:

          remote_hosts=10.13.223.202:1000,10.13.225.12:1888

      4、重启jmeter.bat,如下图,端口已经变了:

      

    五、其它说明:

      1、调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater。

      2、参数文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。

      3、每台机器上安装的Jmeter版本和插件最好都一致,否则会出一些意外的问题。


    作者:Glen.He 
    出处:http://www.cnblogs.com/puresoul/ 
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    ----------------------------------------------------补充------------------------------------------------------------以下

    ----------------------------------------------------补充------------------------------------------------------------以下

    ----------------------------------------------------补充------------------------------------------------------------以下

    JMeter学习(十三)分布式部署

    转载 2014年12月21日 20:13:25

    转自:http://www.cnblogs.com/yangxia-test/p/4016277.html

     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 远程服务器,可能会导致客户端过载,或者网络连接发生拥塞。

     

    使用多台机器产生负载的操作步骤如下:

    (1)在所有期望运行jmeter作为 负载生成器的机器上安装jmeter, 并确定其中一台机器作为 controller ,其他的的机器作为agent 。

    (2) 运行所有 agent 机器上的jmeter-server 文件(假定使用两台机器192.168.9.99 和192.168.9.130 作为agent)

    (3)在controller机器的jmeter的bin目录下,找到jmeter.properties 文件,编辑该文件:

    查找:
    remote_hosts=127.0.0.1
    修改为:
    remote_hosts=192.168.9.99:1099,192.168.9.130:1099 

    这里要特别注意端口后,有些资料说明端口1644为jmeter的controller 和agent 之间进行通信的默认RMI端口号,但是在测试时发现,设置为1644运行不成功,改成1099后运行通过。另外还要留意agent的机子是否开启了防火墙等。

     

    (4)启动controller 机子上的jmeter应用jmeter.bat,选择菜单“运行”--->“远程启动”,来分别启动agent ,也可以直接选择“远程全部启动”来将所有的agent启动。

     

     

    遇到的常见问题:

    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"

  • 相关阅读:
    JS 博客园鼠标点击效果
    安卓socket聊天
    抖音C#版,自己抓第三方抖音网站
    C#网易云音乐播放器
    反编译APK
    Raspberry Config.txt 介绍
    Raspberry U盘操作
    排序(I)
    未解决问题:
    CocoaPod 问题(I)
  • 原文地址:https://www.cnblogs.com/abcd19880817/p/7209442.html
Copyright © 2011-2022 走看看