zoukankan      html  css  js  c++  java
  • 【压测-jmeter】jmeter-下载安装使用


    jmeter介绍

    jmeter是什么?

    jmeter是apache组织开发的,开源的,纯java的压力测试工具

    jmeter可以用来测什么?

     ——|__静态资源(发送给客户端的文件)

            |__动态资源(根据不同用户得到不同回答)

            |__服务器、网络


    下载&安装&启动

    step1: 先确认已安装java

               

                如已经安装java,可以进行step2。否则先下载安装java(java的下载地址http://www.oracle.com/technetwork/java/javase/downloads/index.html

    step2: 来jemeter官网下载吧

               http://jmeter.apache.org/

               具体下载过程参考(https://www.jianshu.com/p/0e4daecc8122

    step3: 在下载路径下启动jmeter

              ➜  bin pwd

             /Users/liurong07/Downloads/软件_下载/apache-jmeter-3.3/bin

             ➜  bin sh jmeter.sh

              

              

              启动后:

             


    使用

    概念科普

    线程组:jmeter是用java实现的,使用java的一个线程来模拟一个用户。所以线程组就是一组虚拟用户。

    使用举例1(GUI模式/http网页压力测试)

    (对ark.baidu.com网页做压力测试)

    配置虚拟用户

    • 添加一个线程组

           

    • 填写线程组参数

                       

                      线程数100:说明这个小组ark_community_group0里面有100个虚拟用户。

                      Ramp-Up Period(in seconds): 设定了一个时间值。100个用户在1s时间内陆续开始访问网页。

                      循环次数:每个虚拟用户访问完网址的循环次数。如果设定1次表示虚拟用户访问后就退出了。如果是永远,则每次访问完都持续访问直到强制停止。

                      所以这一组参数表示:ark_community_group0这个小组里面有100个虚拟用户,它们在1s内陆续访问ark社区,访问完后会退出。

    配置访问网页

                    

    查看结果

                   

                   添加监听器(查看结果树、聚合报告、用表格察看结果、生成概要结果)之后:

                   

                 

                

                 

                聚合报告分析(时间单位ms)

                聚合报告是累加的,每次运行结果都在原来基础上累计统计。

                

                字段详情

                Average:单次请求的平均响应时间

                Median:中位数,50%的响应时间<=9s

                90%Line: 九分位数,90%的响应时间<=19s。   95%Line,99%Line同理。

                Min,Max:最小响应时间、最大响应时间。

                Error%:请求错误的样本占比。

                Throughput:接收并转发的最大数据速率。

                Recived、Sent:接受、传输速率。

    使用举例2(命令行模式/http网页压力测试)

                测试配置文件ark_community_group2.jmx保存下来

                

               用命令行跑配置文件,测试结果记录在ark_community_group2_log.jtl

               

                也可以用GUI察看jtl报告

                

    使用举例3(分布式发压测试)

    原理

    为什么做分布式压测?

           如果在一台机器上做压测,并发数很大(千、万以上),会超过单台机器的CPU、内存承受限度。解决办法:一台机器做控制机控制多台子执行机,多个子执行机一起来分担压测任务。

    分布式压测怎么做?

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

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

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

    分布式压测步骤

              举例说明:master机器上执行分布式测试,执行过程中把**.jmx测试配置文件分配给slave机器执行,并收集slave执行后的结果**.jtl。

          

    (step1)准备

              master和slave上都要安装jmeter,且都关闭防火墙

    (step2)配置

            (1)master机器配置   

               bin/jmeter.properties里面的remote_hosts字段配置上slave机器的ip(172.24.181.253)

               

               

                (2)   slave机器配置

                slave机器的bin/jmeter-server文件的 RMI_HOST_DEF字段配置上自己本机ip(172.24.181.253)

    (step3)GUI方式启动   

                (1)在slave机器上启动server即可(注意slave上的server先启动哦)

                          sh jmeter-server

                  (2) 在master机器上启动jmeter客户段(一定要在slave的server启动后启动啊)

                          

                         查看结果:

                         

    (step4)命令行方式启动

        在master上执行命令:

        如果需要指定某一台slave(172.24.181.253)执行测试脚本:

         sh jmeter.sh -n -t ark_community_group2.jmx -R 172.24.181.253 -l w.jtl 

         例如下面的例子:(sh jmeter.sh -n -t ark_community_group2.jmx -R 10.99.197.118,10.99.195.114,10.94.221.96,10.94.63.53 -l ark03_04_05_junheng184.jtl)

         查看w.jtl执行结果,看到运行成功:

         

         

         如果需要指定全部的slave都跑脚本,就用这个命令:

         sh jmeter.sh -n -t ark_community_group2.jmx -r -l result1.jtl  

         和GUI模式的效果等价:

                  

    注意事项

         常遇到远程启动时链接失败问题,需要确保以下关键点

         1. master和slave的防火墙要关闭,master和slave可以ping通

         2. master和slave的jmeter尽量保持版本一致

         3. jmx配置文件没有必要拷贝到slave上,因为master的远程启动开始后,它自动会分配给slave去执行。

         4. jmx配置的线程数目是100的话,每个slave按照jmx的配置数目执行,所以每个slave执行线程数目也是100,并不是分担100的一部分。

         5. slave能够承受多大的线程数呢,万一slave被打爆了?

             slave机器能够处理线程数和自身的硬件参数有关,举例如果slave的CPU是1.4G-3GHZ,内存是1G内存,可以处理线程数100-300,建议配置不超过100(考虑到承担的任务有可能是xml计算密集型或者网卡交换机影响)

             

         

         参考:

         分布式压测遇到的坑

         http://www.mamicode.com/info-detail-1729730.html

         https://www.cnblogs.com/Fine-Chan/p/6233823.html

         http://www.cnblogs.com/saryli/p/6596015.html

         http://blog.163.com/lucas_nina/blog/static/185960149201492945117318/(硬件参数与建议线程数)


    其他场景补充

    场景1. 同一个机器上同时启动2个(多个)jmeter-server

                可以启动多个,比如在一台机器上启动2个jmeter-server

                配置过程:

                (step-1)slave端配置

                jmeter-slave所在的bin目录下复制出一份jmeter-server2文件,并修改其中端口号为1199:

                ${DIRNAME}/jmeter ${RMI_HOST_DEF} -Dserver_port=${SERVER_PORT:-1199} -s -j jmeter-server.log "$@"

                启动jmeter-server、jmeter-server2,查看端口已经启动ok:

    [work@cp01-ark03 ~]$ netstat -tunpl|grep 1099
    (Not all processes could be identified, non-owned process info
     will not be shown, you would have to be root to see it all.)
    tcp        0      0 :::1099                     :::*                        LISTEN      13156/java          
    [work@cp01-ark03 ~]$ netstat -tunpl|grep 1199
    (Not all processes could be identified, non-owned process info
     will not be shown, you would have to be root to see it all.)
    tcp        0      0 :::1199                     :::*                        LISTEN      14616/java   

                (step-2) master端配置

                jmeter-master的jmeter.properties文件配置:

    remote_hosts=10.99.197.118:1099,
     244 10.99.197.118:1199, 

             (step-3)调度方法

    sh jmeter.sh -n -t ark_community_group2.jmx -R 10.99.197.118:1199,10.99.197.118:1099 -l 118.jtl

                ⚠️如果不指定端口号,这样直接调用的话就使用1099端口号跑脚本,1199端口没有跑(sh jmeter.sh -n -t ark_community_group2.jmx -R 10.99.197.118 -l 118.jtl)或者(sh jmeter.sh -n -t ark_community_group2.jmx -R 10.99.197.118,10.99.197.118 -l 118.jtl)

               

    遗留问题

    同一个线程组下面,能不能拆分成比例去访问http?

    path的参数可变化设置

    slave的守候进程是什么时候起来的,每个slave分担任务量是怎样?(slave-master怎么交互)(master-slave的部署是不是需要在一个网段下)

    断言



    相关参考

    静态资源、动态资源

    http://blog.csdn.net/u012110719/article/details/44239429

    jmeter百科

    https://baike.baidu.com/item/Jmeter/3104456?fr=aladdin

    jmeter下载安装

    https://www.cnblogs.com/ceshisanren/p/5639895.html

    https://www.jianshu.com/p/0e4daecc8122

    jmeter聚合报告分析

    https://www.cnblogs.com/Uther/p/5292123.html

    自定义脚本方式:
    https://www.cnblogs.com/linglingyuese/articles/linglingyuese-two.html

    jtl格式解析
    https://www.cnblogs.com/miaomiaokaixin/p/6118081.html

    分布式介绍

    https://www.cnblogs.com/puresoul/p/4844539.html

    http://blog.csdn.net/wuhenyan/article/details/53117556

    jmeter压测thrift的例子

    http://blog.csdn.net/mn960mn/article/details/50684877

    http://blog.csdn.net/cmrsautomation/article/details/53357976

    自定义header

    http://blog.csdn.net/difffate/article/details/73442130


     

    大道至简
  • 相关阅读:
    layui的form.val无法动态渲染赋值表单问题解决方法
    Android studio引入三方sdk运行时报错Cause: invalid opcode ba (invokedynamic requires --min-sdk-version >= 26)
    tp6通过闭包方式连表查询的问题
    android中简单便捷使用GreenDao本地数据库及采坑之路
    Java多线程(一)
    Java集合
    JAVA IO/NIO
    JVM类加载机制
    JVM垃圾回收与算法
    JVM内存模型
  • 原文地址:https://www.cnblogs.com/liurong07/p/11202752.html
Copyright © 2011-2022 走看看