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
每天进步一点点