前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >如何模拟超过 5 万用户的并发访问?

如何模拟超过 5 万用户的并发访问?

作者头像
用户1516716
发布于 2019-10-30 08:11:18
发布于 2019-10-30 08:11:18
1.5K0
举报
文章被收录于专栏:A周立SpringCloudA周立SpringCloud

来源:http://t.cn/ES7KBkW

本文将从负载测试的角度,描述了做一次流畅的5万用户并发测试需要做的事情.

你可以在本文的结尾部分看到讨论的记录.

快速的步骤概要

  1. 编写你的脚本
  2. 使用JMeter进行本地测试
  3. BlazeMeter沙箱测试
  4. 使用一个控制台和一个引擎设置Users-per-Engine的数量
  5. 设置并测试你的集合 (1个控制台和10-14 引擎)
  6. 使用 Master / Slave 特性来达成你的最大CC目标

img

步骤1 : 编写你的脚本

开始之前,请确定从JMeter的Apache社区jmeter.apache.org 获得了最新的版本.

你也会要下载这些附加的插件 ,因为它们可以让你的工作更轻松.

有许多方法可以获得脚本:

  1. 使用 BlazeMeter 的 Chrome 扩展 来记录你的方案
  2. 使用 JMeter HTTP(S) 测试脚本记录器 来设置一个代理,那样你就可以运行你的测试并记录下所有的东西
  3. 从头开始全部手工构建(可能是功能/QA测试)

如果你的脚本是一份记录的结果(像步骤1&2), 请牢记:

  1. 你需要改变诸如Username & Password这样的特定参数,或者你也许会想要设置一个CSV文件,有了里面的值每个用户就可以是不同的.
  2. 为了完成诸如“添加到购物车”,“登录”还有其它这样的请求,你也许要使用正则表达式,JSON路径提取器,XPath提取器,来提取诸如Token字符串,表单构建ID还有其它要素
  3. 保持你的脚本参数化,并使用配置元素,诸如默认HTTP请求,来使得在环境之间切换时你的工作更轻松.

步骤2 : 使用JMeter进行本地测试

在1个线程的1个迭代中使用查看结果树要素,调试样本,虚拟样本还有打开的日志查看器(一些JMeter的错误会在里面报告),来调试你的脚本.

遍历所有的场景(包括True 或者 False的回应) 来确保脚本行为确如预期…

在成功使用一个线程测试之后——将其提高到10分钟10到20个线程继续测试:

  1. 如果你想要每个用户独立——是那样的么?
  2. 有没有收到错误?
  3. 如果你在做一个注册过程,那就看看你的后台 - 账户是不是照你的模板创建好了? 它们是不是独立的呢?
  4. 从总结报告中,你可以看到对测试的统计 - 它们有点用么? (平均响应时间, 错误, 每秒命中率)

一旦你准备好了脚本:

  1. 通过移除任何调试和虚拟样本来清理脚本,并删除你的脚本侦听器
  2. 如果你使用了侦听器(诸如 "将响应保存到一个文件"),请确保你没有使用任何路径! , 而如果他是一个侦听器或者一个CSV数据集配置——请确保你没有使用你在本地使用的路径 - 而只要文件名(就好像跟你的脚本在同一个文件夹)
  3. 如果你使用了自己专有的JAR文件,请确保它也被上传了.
  4. 如果你使用了超过一个线程组(不是默认的那个) - 请确保在将其上传到BlazeMeter之前设置了这个值.

步骤3 : BlazeMeter沙箱测试

如果那时你的第一个测试——你应该温习一下 这篇 有关如何在BlazeMeter中创建测试的文章.

将沙箱的测试配置设置成,用户300,1个控制台, 时间50分钟.

对沙箱进行这样的配置让你可以在后台测试你的脚本,并确保上的BlazeMeter的一切都运行完好.

为此,先按下灰色的按钮: 告诉JMeter引擎我想要完全控制! - 来获得对你的测试参数的完全控制

通常你将会遇到的问题:

  1. 防火墙 - 确保你的环境对BlazeMeter的CIDR 列表 (它们会实时更新)开发,并把它们放入白名单中
  2. 确保你所有的测试文件, 比如: CSVs, JAR, JSON, User.properties 等等.. 都可以使用
  3. 确保你没有使用任何路径

如果仍然有问题,那就看看错误日志吧(你应该可以把整个日志都下载下来).

一个沙箱的配置可以是这样的:

  • 引擎: 是能使控制台(1 个控制台 , 0 个引擎)
  • 线程: 50-300
  • 产能提升: 20 分钟
  • 迭代: 一直测试下去
  • 时间: 30-50 分钟

这可以让你在产能提升期间获得足够多的数据(以防你遇到问题) ,而你将可以对结果进行分析,以确保脚本的执行确如预期.

你应该观察下Waterfall / WebDriver 选项卡来看看请求是否正常,你不应该在这一点上出任何问题(除非你是故意的).

你应该盯着监控选项卡,观察期内存和CPU消耗 - 这对你在步骤4中尝试设置每一个引擎的用户数量.

步骤4 : 使用1个控制台和1个引擎来设置每个引擎用户的数量

现在我们可以肯定脚本能在BlazeMeter中完美运行了——我们需要计算出要多少用户放到一个引擎中.

如果你能用户沙箱中的数据来做这个决定,那就太棒了!

在这里,我会给出一种不用回头去查看沙箱测试数据就能计算出这个数的方法.

设置你的测试配置:

  • 线程数: 500
  • 产能提升:40 分钟
  • 迭代: 永久
  • 时长: 50 分钟

使用一个控制台和一个引擎.

运行测试并(通过监视选项卡)对你的测试引擎进行监视.

如果你的引擎对于75%的CPI使用率和85%的内存使用率都没有达到(一次性的峰值可以忽略) 的话:

  • 将线程数调整到700在测试一次
  • 提交线程的数量直到线程数达到1000或者60%的CPU或内存使用

如果你的引擎过了75%的CPU使用率或者85%的内存使用率(一次性的峰值可以忽略 :

  • 看看你第一次达到75%的点,在那个点有多少并发用户.
  • 在运行一次测试, 而不是提高你之前500个用户数量的产能
  • 这一次将产能提升放到真实的测试中(5-15 分钟是一个好的开始) 并将时长设置为50分钟.
  • 确保整个测试过程中没有超过75%的CPU使用率或者85%的内存使用率…

为安全起见,你可以把每个引擎的线程数降低10%的.

步骤5:安装并测试集群

我们现在知道了从一个引擎中我们得到了多少线程,在该章节的最后,我们将会知道一个集群能给我们提供多少用户。

一个集群是指具有一个控制台(仅有一个)和0-14个引擎的逻辑容器

即使你可以创建一个使用超过14个引擎的测试案例——但实际上是创建了两个集群(你可以注意到控制台的数量增加了),并且克隆了你的测试案例……

每个集群具有最多14个引擎,是基于BlazeMeter自己本身的测试,以确保控制台可以控制这14台引擎对新建的大量数据处理的压力。

所以在这一步骤中,我们会用步骤4种的测试,并且仅仅修改引擎数量,将其增加到14.

将该测试按照最终测试的全部时长运行。当测试在运行时,打开监听标签,并且检验:

  1. 没有一个引擎超过CPU75%的占有率和内存85%占有率的上限;
  2. 定位你的控制台标签(你可以通过一次点击Logs Tab->Network Information,查看控制台私有IP地址来找到它的名字)——它不应该达到CPU75%占有率和内存85%占有率的上限。

如果你的控制台达到了该上限——减少引擎数量并重新运行直到控制台在该上限之下。

在这个步骤的最后,你会发现:

  1. 每个集群的用户数量;
  2. 每个集群的命中率。

查看Aggretate Table中的其他统计信息,并找到本地结果统计图来获得有关你集群吞吐量的更多信息。

步骤 6 : 使用 Master / Slave 特性来达成你的最大CC目标

我们到了最后一步了。

我们知道脚本正在运行,我们也知道一个引擎可以支持多少用户以及一个集群可以支持多少用户。

让我们做一下假设:

  • 一个引擎支持500用户
  • 一个集群可以用户12个引擎
  • 我们的目标是5万用户测试

因此为了完成这些,我们需要8.3 个集群..

我们可以用8个12台引擎的集群和一个4太引擎的集群 - 但是像下面这样分散负载应该会更好:

每个集群我们用10台引擎而不是12,那么每个集群可以支持 10*500 = 5K 用户并且我们需要10个集群来支持5万用户。

这样可以得到如下好处:

  1. 不用维护两个不同的测试类型
  2. 我们可以通过简单的复制现有集群来增加5K用户(5K比6K更常见)
  3. 只要需要我们可以一直增加

现在,我们已经准备好创建最终的5万用户级别的Master / Slave测试了:

  1. 将测试的名称从"My prod test" 改为"My prod test - slave 1"。
  2. 我们回到步骤5,将高级测试属性(Advanced Test Properties)下的Standalone修改为Slave。
  3. 按保存按钮——现在我们有了一个Master和9个Slave中的一个。
  4. 返回你的 "My prod test -slave 1".
  5. 按复制按钮
  6. 接下来重复步骤1-5直到你创建了9个slave。
  7. 回到你的 "My prod test -salve 9" 并按复制按钮.
  8. 将测试的名称改为 "My prod test -Master".
  9. 将高级测试属性(Advanced Test Properties) 下的Slave改为Master。
  10. 检查我们刚才创建的所有的Slave(My prod test -salve 1..9)并按保存。

你的5万用户级别的Master-Slave测试已经准备好了。通过按master上的开始按钮来运行10个测试,每个测试5千用户。

你可以修改任意一个测试(salve或master),让它们来自不同的区域,有不同的脚本/csv/以及其他文件,使用不同的网络模拟器,不同的参数等。

你可以在一个叫“Master load results”的master报告中的一个新tab页中找到生成的聚合结果的报告,你还可以通过打开单个的报告来独立的查看每一个测试结果。

英文原文:How to run a load test of 50k+ concurrent users 参与翻译: LeoXu, 0x0bject, 麦壳原野, 中奖啦

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT牧场 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
你会不会模拟超过 5 万用户的并发访问?
开始之前,请确定从JMeter的Apache社区jmeter.apache.org 获得了最新的版本.
芋道源码
2019/06/11
7640
如何运行50k +并发用户的负载测试
本文将介绍使用50k并发用户测试轻松运行负载测试所需的步骤(以及最多200万用户的更大测试)。
Java架构师历程
2019/03/08
1.4K0
如何运行50k +并发用户的负载测试
性能测试工具Jmeter分布式运行
性能测试工具JMeter的分布式执行是一种用于增强压力测试能力的技术方案,它允许用户通过多台机器来共同完成同一个测试计划的执行。这种方式特别适用于需要模拟成百上千甚至上万用户并发访问的情况,当单台机器由于硬件资源(如CPU、内存、网络I/O等)限制无法满足高并发需求时,分布式执行可以有效地解决这个问题。
漫谈测试
2025/01/15
960
性能测试工具Jmeter分布式运行
性能工具之 Gatling 入门
Gatling 基于 Scala 开发的压测工具,我们可以通过录制自动生成脚本,也可以自己编写脚本.
高楼Zee
2021/09/23
1.7K0
性能工具之 Gatling 入门
详细讲解mysql 主从复制原理「建议收藏」
在很多项目,特别是互联网项目,在使用MySQL时都会采用主从复制、读写分离的架构。
全栈程序员站长
2022/07/19
1.2K0
详细讲解mysql 主从复制原理「建议收藏」
【TEGer 在全球架构师峰会】 : 腾讯企业级消息中间件 CMQ 技术解密
腾讯技术工程官方号
2018/01/02
2.1K0
【TEGer 在全球架构师峰会】 : 腾讯企业级消息中间件 CMQ 技术解密
性能测试过程中你需要了解的专业及非专业术语
测试工具产生的用户(Jmeter和LoadRunner都可以产生虚拟用户),用来模拟真实用户进行的一系列的操作。
漫谈测试
2024/12/16
780
性能测试过程中你需要了解的专业及非专业术语
学会MySQL主从复制读写分离,看这篇就够了
在很多项目,特别是互联网项目,在使用MySQL时都会采用主从复制、读写分离的架构。
java技术爱好者
2020/09/22
5520
JMeter最多可以模拟多少测试用户数?
本文我们将讨论一个确切说没有准确答案的问题 - 即我们使用Apache JMeter™最多可以模拟多少用户来做测试? 像JMeter本身的限制一样,这样的限制因素有很多. 它取决于你机器的性能和网络、
用户1263954
2018/01/30
9.8K0
JMeter最多可以模拟多少测试用户数?
Jmeter(四十七) - 从入门到精通高级篇 - 分布式压测部署之负载机的设置(详解教程)
  千呼万唤始出来,这一篇感觉写了好久,总想写的清楚明白简洁,但是还是洋洋洒洒写了好多,希望大家喜欢吧!本来打算将这一篇文章是放在性能测试中讲解和分享的,但是有的童鞋或者小伙伴们私下问的太多了,实在是忍不了也解答烦了,索性就在这里分享一下吧。权当参考,但是希望对大家有所帮助。
北京-宏哥
2021/06/01
3.9K0
Jmeter(四十七) - 从入门到精通高级篇 - 分布式压测部署之负载机的设置(详解教程)
Redis常见面试题(二):redis分布式锁、redisson;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
还记得Redis使用场景、缓存穿透、缓存击穿、缓存雪崩、Redis持久化、数据过期策略、数据淘汰策略吗?如果忘记可以到这里重新温习, Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略。
寻求出路的程序媛
2024/07/24
2.3K0
Redis常见面试题(二):redis分布式锁、redisson;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
中华石杉Java面试突击第一季笔记三(分布式缓存)
整合了商品名称、价格、图片、简介的商品详情页就是典型的场景,可以把通过复杂操作耗时查询出来的结果,确定短时间内不会频繁更新变化,但是对这个数据会有大量读请求,这个时候就可以直接把结果存放在缓存中,后面的请求就直接读取缓存即可。
chenchenchen
2022/03/09
5850
中华石杉Java面试突击第一季笔记三(分布式缓存)
Locust:简介和基本用法
我个人在性能测试工作中,负载生成工具使用的大多都是jmeter,之前学习python时顺带了解过python开源的性能测试框架locust。这篇文章,简单介绍下locust的使用方法,仅供参考。。。
老_张
2019/12/02
2.1K0
Locust:简介和基本用法
我个人在性能测试工作中,负载生成工具使用的大多都是jmeter,之前学习python时顺带了解过python开源的性能测试框架locust。这篇博客,简单介绍下locust的使用方法,仅供参考。。。
Java架构师必看
2021/12/19
8430
Locust:简介和基本用法
小试牛刀—完整实例带你探究LR性能测试(PartB)
单独场景压力测试:针对某个功能点进行压力测试,分析测试结果是否满足用户要求的指标;
晴空SunnySky
2023/10/07
2910
『学习笔记』如何监控 WebLogic 的运行状态与性能
🎈今日推荐——https://cloud.tencent.com/developer/article/2467394
数字扫地僧
2024/11/20
1730
『学习笔记』如何监控 WebLogic 的运行状态与性能
使用Redis Dataset JMeter插件即时控制您的测试数据
试想一下,你有一个应用程序,你要性能测试,以及应用程序需要同时检测被消耗数据。如果您有这种需要(并且您熟悉JMeter),那么您可能会使用CSV数据集config。CSV数据集配置具有一些出色的功能,可让您控制测试将如何使用数据的大多数方面。
用户8460142
2023/07/07
3240
使用Redis Dataset JMeter插件即时控制您的测试数据
Locust学习笔记2——环境搭建与基本用法
  前面已经对市场上一些比较热门的性能测试工具进行了对比,这里主要介绍Locust性能测试框架的使用,如果你喜欢编码,学习Python自动化测试的时候,同时又能学习一款性能测试工具,何乐而不为呢。
全栈测试开发日记
2023/02/02
6920
Locust学习笔记2——环境搭建与基本用法
用分布式技术轻松化解数据库容量和性能瓶颈
腾讯云数据库团队
2017/06/27
4.2K1
用分布式技术轻松化解数据库容量和性能瓶颈
JMeter性能测试之负载与监听实战
JMeter 线程组实际上建立了一个线程池,JMeter 根据用户的设置进行线程池初始化,在运行时做各种运行逻辑处理。如途中所示,我们先看看线程组中的参数说明:
全栈程序员站长
2021/07/15
7710
JMeter性能测试之负载与监听实战
推荐阅读
相关推荐
你会不会模拟超过 5 万用户的并发访问?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文