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
    •  
每天进步一点点
原文地址:https://www.cnblogs.com/BigTian/p/14415897.html