zoukankan      html  css  js  c++  java
  • jmeter分布式压测

      • 一、Jmeter进行性能测试时,如果并发数比较大,单台电脑的配置(CPU和内存)可能无法支持,或者本地网络带宽不足等,这时可以使用Jmeter提供的分布式测试的功能。
      • 二、原理:
      • 1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
      •    2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,我理解它应该是通过命令行模式执行的。
      •    3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总
      • 三、jmeter配置:
      • 1.bin目录下 jmeter.properties文件配置:
      • 调度机(master): 258行 remote_hosts=127.0.0.1,192.168.103.43:1099,192.168.103.44 ----> xxx.xxx.xxx.xxx:1099 建议调度机不要配置自己,只作为控制机使用。
      • 262行 server_port=1099 --->去掉#
      • 300行 server.rmi.localport=1099 --->去掉#
      • 334行 server.rmi.ssl.disable=true --->去掉#
      • 执行机(slave):
      • 258行 remote_hosts=本从机ip:1099 ----->同局域网内可配置 127.0.0.1
      • 262行 server_port=1099
      • 300行 server.rmi.localport=1099
      • 334行 server.rmi.ssl.disable=true
      • 四、配置完成后, 从机 启动 jmeter-server
      • 报错:chmod +x jmeter-server加权限
      • 若将主机(master)也作为从机(slave)使用则 主机(master)也需启动 jmeter.server
      • liunx从机(slave)启动jmeter.server服务 ./jmeter-server -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx (从机ip) (直接./jmeter-server可能会启动失败)
      • 五、注意事项:
      • 1.主机添加 127.0.0.1便可将主机也作为从机使用
      • 2.从机只需添加本机ip(或不修改这部分)
      • 3.主机(Windows)启动 jmeter.server失败:liunx同理
      • 3.1 查看1099端口是否被占用:
      • 使用命令:netstat -aon|findstr 1099 找出占用1099端口的进程 关闭占用该端口的进程:taskkill -f -pid 3756
      • 3.2 controller的日志看bin目录下面的jmeter.log
      • 压力机的日志看bin目录下面的jmeter-server.log
      • 4.在公司进行分布式,建议将VPN关闭。
      • 六、扩展:
      • 1.不在同一局域网如何进行分布式:
      • 只需要将从机jmeter.properties文件中 258行改为 remote_hosts=本从机ip:1099,其他配置同上即可调用。
      • 但不在同一局域网,可能因数据传输量过于巨大而导致jmeter卡死。
      • 注:若出现找不到hostname 将虚拟机的名字改为IP地址
      • 或者将hostname改为ip也可以
      • jmeter分布式压测不同线程场景及插件用法及效果展示
      • 1、jp@gc - Stepping Thread Group (deprecated)
      • 参数说明
      • This group will start:线程数,图中为100个线程
      • First wait for:第一个线程延迟多久启动,上图是0秒
      • Then start:初始加载多少个个现成,图中为0个
      • Next,add:下次加载多少个线程,图中为10个
      • Threads every:运行多久后再加载线程,图中为1s
      • Using ramp-up:加载next线程的时间,图中为0s,即初始化情况下,0s内加载10个线程,然后每隔1s再加载10个,加载100个需要9s。
      • Then hold load for:全部线程加载完毕后持续运行多久,单位s,上图是100个线程全部加载完毕,持续运行60s。即,100并发运行60s。
      • Finally stop/threads every:多长时间停止多少线程,上图是在1s内停止10个线程,停止100个需要9s.
      • Elapsed time:加载线程的时间9s+持续运行的时间60s+线程停止的时间9s=78s

      • cpu的随着线程增加逐步增加,当到达一定线程之后cpu在一定范围内波动展示
      • 2、Ultimate thread group线程组
      • Ultimate thread group线程组是模拟波浪式压测
      • Start Threads Count :设置启用并发数
      • Initial Delay,sec:设置延迟时间,延迟多少秒开始
      • Startup Time,sec:设置启动时间,持续多少秒递增至启动
      • Hold Load For,sec:设置持续时间,要跑多少秒
      • Shutdown Time:设置结束时间,持续多少秒递减至关闭

      • 可用于配置多个不用的线程组,和不同的线程数量
      • 3、Synchronizing Timer:同步定时器
      • 作用:也是用来设置集合点,阻塞线程,同步虚拟用户,直到指定的线程数量到达后,恰好在同一时刻执行任务,再一起释放,可以瞬间产生很大的压力。

      • Number of Simulated Users to Group by:集合点个数 (执行的线程数),如果设置为0,等于设置为线程租中的线程数量。
      • Timeout in milliseconds:指定线程数多少秒没集合到算超时(以毫秒为单位)。如果设置为0,该定时器将会等待线程数达到了"Number of Simultaneous Users toGroup"中设置的值才释放,不够的话就死等。如果大于0,那么如果超过Timeout inmilliseconds中设置的最大等待时间后还没达到"Number of Simultaneous Users toGroup"中设置的值,Timer将不再等待,释放已到达的线程。默认为0
      • 注意:
      • 上面两个参数如果都设置了值,则在实际中是哪个条件先达到,定时器先执行哪个,如第一个参数释放线程数量先达到,则不会管超时时间的值,timer会释放;如果第二个参数超时时间先达到,则不会再等线程数量,按照目前超时的时间点集合的线程数,timer释放。
      • cpu展示图为先增加至最高点 再急速下降

      • 4、Throughput Shaping Timer定时器
      • 作用:用来模拟指定的系统吞吐量
      • 参数说明:
      • Start RPS:RPS的起始值
      • End RPS:RPS的结束值
      • Duration,sec:持续时间,单位:秒
      • 添加吞吐量调整计时器以设置RPS计划。此计时器将自动延迟请求以达到我们的目标RPS负载水平
      • 在平衡状态,或者说到达速度,尚未达到应用处理的瓶颈的时候:
      • 并发 = rps * 响应时间

      • 例图:在“每秒请求数”(RPS)计划区域中添加两行:

      • 根据此元素,此测试的总持续时间应为120秒。
      • 根据并发线程组,测试的持续时间应为2分钟。2分钟后脚本停止。这表明脚本在RPS计划完成后停止。
      • 查看“每秒事务数”侦听器。未达到50 RPS的预期负载。10个虚拟用户每秒只能保留约21个请求。
      • 线程池大小= RPS * <最大响应时间> / 1000
      • RPS是50。
      • “最大响应时间”为551ms。
      • 线程池大小= 50 * 551/1000 = 27.55
      • 5、逻辑控制器-吞吐量控制器
      • 吞吐量控制器(Throughput Controller)用来控制其下元件的执行次数,并无控制吞吐量的功能。 作用:控制其下的子节点的执行次数与负载比例分配
      • 吞吐量控制器字段介绍:
      • Total Executions:执行百分比(1-100)
      • percent Executions:执行数量
      • 1、吞吐量控制器采用percent Executions 百分比控制, Throughput设为80,表示此吞吐量控制器按线程组线程总数的80%

      • 本次压测效果图:(样本数量成比例展示)

      • 2、勾选totalExecutions 是设置并发数量,表示只并发设置的数量。

      • 效果图:

      • 3、Total and Percent Executions组合使用
      • 业务A使用Percent Executions, 并且勾选Per User

      • 业务B使用Total Execution, 设置Throughput为3

      • 运行看结果

      • 从结果报告可以看出, 总线程组设置10个并发, 业务A选择percent Executions, 勾选per user, 并发数量是总线程的并发数
      • 生成聚合报告
      • jmeter -n -t H5.jmx -l result.jtl
      •  
    每天进步一点点
  • 相关阅读:
    JAVA 多线程(3)
    JAVA 多线程(2)
    JAVA 多线程(1):synchronized
    阿里金服设置公钥-验证私钥
    linux (1): 启动
    新建项目虚拟环境及pycharm配置
    python创建udp服务端和客户端
    python创建tcp服务端和客户端
    python并发(阻塞、非阻塞、epoll)
    mongo基本操作
  • 原文地址:https://www.cnblogs.com/BigTian/p/14415897.html
Copyright © 2011-2022 走看看