性能测试项目实战:应用加载慢该怎么办?

2023-11-06

一、背景

app收到留学push、课堂、资讯,用户点击push消息,进入app,应用加载很慢,容易出现应用假死、app崩溃或提示网络异常等信息。

给用户体验十分不友好,监控阿里云资源tcp连接数飙高,cpu打满,自愈能力(系统恢复能力)低。

二、分析  

push频率过高(这本身没有问题),从而导致收到push的用户过多,如果按10000的push到达,20%的用户同时点击,那么将造成大于等于200的用户并发量。

从服务器看资源:cpu、内存、磁盘I/O一切显示正常,但是业务处理存在漏洞,即离线app收到推送,打开push时,接口请求过多,一度达到30+接口,又或者可能出现服务器出现短暂网络波动,即带宽过大(大于设定值5Mbit/s),服务器自动恢复,影响范围约2min甚至更久,同时监控阿里云tcp连接数在短暂时间里达到4-6k的连接数,超出平均水平一大截<需要压测得出一个极限值>。

小知识:理论1个tcp连接数对应1个http请求,1个push进入app,触发了3个或多个http请求,但是http2.0是支持并行请求tcp连接,那么1个用户请求的多个http请求创建的也是1个tcp连接,http1.1默认带connection参数,保持持久连接。

但是该版本不能并行请求,出现的是多对多的关系,然后nginx可以配置http的协议版本?

三、结果 

大致可以判断出,前面用户批量请求服务器,创建tcp连接过多,用户持续继续访问,那么tcp连接不能及时释放<处理更多htttp请求>,那么造成服务器tcp连接数过高,app没有接收到后端响应故而服务器响应出现请求超时。

这时候需要性能测试,得出系统、应用程序瓶颈进行调优。

准备性能测试环境

包括用户(业务)数据、接口信息、开发测试脚本等。

四、 设计性能测试用例  

前提是了解业务流程,建立业务模型,即有可能出现性能问题的点,那么在开发脚本时也会对此进行单接口、组合场景的设计。

如背景现象描述,用户收到push,从此进入app应用请求其他资源,那么需要获取这几个请求的接口,作为一个整体事务请求,业务分析、iOS离线推送将每个tab首页都加载了,请求接口过多,需要拆分添加子事务进行监控。

即推送app、发起push、点击push整体作为一个事务请求,其中首页、上课、考试、留学等根据需求拆分子事务。

场景设计

假设没有缓存,先关闭redis服务,进行压测,逐步加压,例如1、10、20、50、100、200、300、500进行5分钟持续并发压测,收集性能结果。

现象还原

通过不断加压并发,得出服务器所承受最大并发数,系统出现瓶颈,根据监控的结果分析,开始优化:加缓存、代码优化、sql建立索引,再重复压测,以出现现象的并发数进行压测,结果是否较调优前有优化(标准:tps、响应时间、app现象等)。

性能指标计算公式:tps=通过事务总数/运行脚本总时长。

首页代入一个性能概念:Vuser、TPS、RT,随着用户数递增请求,响应时间随之递增、通过事务数也会增加。

a、随着用户数增加,持续并发一段时间,RT、TPS也会随之平稳逐步增加,即上下波动略小,正常现象,但是需要分析rt、tps是否达到预期;

b、随着用户数增加,持续并发一段时间,RT猝然上涨、服务器可能出现cpu被打满,应用程序无法响应;

c、随着用户数增加,通过事务数递增,响应时间递增<终究达不到预期>,tps上不去,表示服务器处理能力低,需要分析原因。

五、收集性能测试结果  

进行结果分析

1、tps上不去的原因:由简入繁排第一位的首先检查网络带宽--连接池<服务器>--垃圾回收机制--数据库配置<如果需要写库>--通讯机制--硬件资源--负载机资源不足--脚本设计问题<需要从场景设计方向入手>--系统架构--并发数设置问题;解决的第一个问题就是检查宽带只有3M,流量无法进来<请求服务>,被挡在外面

2、正常现象是可以看到tps随着用户的递增而递增。

 

3、响应时间也是随着并发用户数递增而递增。

4、在脚本运行之前初始化Vuser虚拟用户,随着并发用户的递增,响应时间也随之递增,在期望响应时间对应的纵坐标用户数,即为最优并发用户数<不要看响应时间上的纵坐标标识的用户数>。

5、单机目前负载生成的用户,无论何种压测策略,都无法将服务器压垮或者app出现无法正常响应事件,需要分布式压测。

6、在uat环境压测,当并发用户数上去之后,服务器资源cpu暴涨,出现服务假死状态,jvm排查线程,发现是底层框架导致。

 

最后想领取性能测试资料的可以点击链接直接领取2023最新软件测试全套【自学资料包】

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

性能测试项目实战:应用加载慢该怎么办? 的相关文章

  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • 安装了 32 位的 Python,显示为 64 位

    我需要运行 32 位版本的 Python 我认为这就是我在我的机器上运行的 因为这是我下载的安装程序 当我重新运行安装程序时 它会将当前安装的 Python 版本称为 Python 3 5 32 位 然而当我跑步时platform arch
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • 用枢轴点拟合曲线 Python

    我有下面的图 我想用 2 条线来拟合它 使用 python 我设法适应上半部分 def func x a b x np array x return a x b popt pcov curve fit func up x up y 我想用另
  • 跟踪 pypi 依赖项 - 谁在使用我的包

    无论如何 是否可以通过 pip 或 PyPi 来识别哪些项目 在 Pypi 上发布 可能正在使用我的包 也在 PyPi 上发布 我想确定每个包的用户群以及可能尝试积极与他们互动 预先感谢您的任何答案 即使我想做的事情是不可能的 这实际上是不
  • Pandas 日期时间格式

    是否可以用零后缀表示 pd to datetime 似乎零被删除了 print pd to datetime 2000 07 26 14 21 00 00000 format Y m d H M S f 结果是 2000 07 26 14
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • 您可以格式化 pandas 整数以进行显示,例如浮点数的“pd.options.display.float_format”?

    我见过this https stackoverflow com questions 18404946 py pandas formatdataframe and this https stackoverflow com questions
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • import matplotlib.pyplot 给出 AttributeError: 'NoneType' 对象没有属性 'is_interactive'

    我尝试在 Pycharm 控制台中导入 matplotlib pyplt import matplotlib pyplot as plt 然后作为回报我得到 Traceback most recent call last File D Pr
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • 在本地网络上运行 Bokeh 服务器

    我有一个简单的 Bokeh 应用程序 名为app py如下 contents of app py from bokeh client import push session from bokeh embed import server do
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • 如何应用一个函数 n 次? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我有一个函数 它接受一个参数并返回相同类型的结果 def increment x return x 1 如何制作高阶函数repeat可以

随机推荐

  • 动手学CV-目标检测入门教程5:损失函数

    3 5 损失函数 本文来自开源组织 DataWhale CV小组创作的目标检测入门教程 对应开源项目 动手学CV Pytorch 的第3章的内容 教程中涉及的代码也可以在项目中找到 后续会持续更新更多的优质内容 欢迎 如果使用我们教程的内容
  • php数组转xml

    span style font family none ar array span auth gt array user gt customer password gt password context gt 4 owner gt arra
  • 二、一个简单的两层神经网络的实现

    目录 一 numpy实现 二 pytorch实现 1 手动求导 2 自动求导 三 torch nn torch optim实现实现 1 torch nn实现自动求导 2 optim选择并执行各种优化方法 3 继承torch nn Modul
  • 16课:关于Springboot和@Cacheable注解拉去缓存,@CacheEvict清空缓存的原理

    16课 关于Springboot和 Cacheable注解拉去缓存 CacheEvict清空缓存的原理 简介 代码展示 1 pox xml 2 application properties文件 3 RedisCacheableConfig缓
  • ARM开发板介绍及SRAM和SDRAM的区别

    开发板型号 tiny 4412 核心板 exynos4412 三星 SOC ARM架构 ARMv7 架构 coretex A9系列 四核1 4Ghz 32 bit SRAM 256K ROM 16K DDR SDRMD 1Gbyts 内存物
  • vue父组件监听子组件生命周期

    还是记一下吧 总是忘 通过在子组件生命周期里公开一个事件 通过父组件监听 在子组件中 mounted this emit mounted mounted 触发了 父组件监听
  • 解决AD 敷铜连不上焊盘的问题

    一 如下选择 第二步 点击 添加 新建一个网络点 GND 网络名 GND 然后点击 确定 第三步 选择需要连线的焊盘 Net处选择 GND 第四步 选择敷铜按钮 网络选项中 链接到网络选择 GND 结果
  • C++多态的理解

    1 多态的概念及分类 多态是面向对象程序设计的一个重要特征 多态的字面意思就是多种状态 在面向对象的程序设计中 一个接口 多种实现即为多态 c 的多态性具体体现在编译和运行两个阶段 编译时多态是静态多态 在编译时就可以确定使用的接口 运行时
  • 查找一个数组中出现次数最多的元素。(c于c++)

    三键三连 输入输出 输入 n n lt 100 n个元素值 输出 数组中出现次数最多的元素 样例 输入样例 1 3 1 1 2 输出样例 1 1 include
  • 关于删除redis缓存

    验证环境的redis有三个节点 你必须三个节点的缓存数据都删掉 删掉之后记得要到系统工具里面刷新缓存 别单词地就是删了缓存就不管了 CROSSSLOT Keys in request don t hash to the same slot这
  • 可以赚钱的网络游戏?这六款也许有你想要的!

    随着人们生活水平的提高 娱乐方式也趋向多样化 而网络游戏已经成为当代人生活中不或缺的娱乐项目之一 所谓人生如戏 现实生活中 我们总是受各种因素的约束 没有办法得到释放 而网络游戏却开启了我们的第二人生 很多在现实中无法实现的梦想 我们都可以
  • 学习笔记--配置DHCP服务器(基于接口的地址池)

    一 开启DHCP功能 并且把相应端口加入VLAN 并且设置vlan网关1 开启dhcp功能 Huawei dhcp enable 2 创建vlan 10 20 Huawei vlan batch 10 20 3 把g0 0 1 跟g0 0
  • 分组转发算法

    1 首先从IP数据报首部提取出目的主机的IP地址D 得出其所在的网络N 2 若N就是与此路由器直接相连的某个网络 则进行直接交付 不需要经过其它的路由器 进行转发 直接把数据报交付给目的主机 否则就执行 3 3 若路由表中有目的地址为D的特
  • torch包下载和安装失败的解决

    今天打算使用python的 torch包的时候 输入pip install torch 在pycharm下载一直失败 报错信息里面提示一开始是pip版本出错 WARNING You are using pip version 20 0 2
  • ora-30926:无法在源表中获得一组稳定的行

    解决办法 原表的数据保证唯一 可以distinct
  • dll、so库转Java代码

    dll so库转Java代码 下载jar JNA代码生成 参数说明 生成的maven项目代码结构如下 众所周知 java程序如果要调用动态库 so dll 的函数 最传统方式是使用JNI技术 用JNI写java调用接口代码是非常痛苦的 调试
  • 538.把二叉搜素树转换为累加树

    538 把二叉搜索树转换为累加树 题干描述 解题思路 递归 1 递归函数参数以及返回值 2 确定终止条件 3 确定单层递归的逻辑 迭代 代码实现 递归法 迭代法 题干描述 力扣入口 给出二叉搜索树的根节点 该树的节点值各不相同 请你将其转换
  • 13智慧农业

    一张图读懂一个产业之智慧农业 一般认为 智慧农业指的是利用物联网 人工智能 大数据等现代信息技术与农业进行深度融合 实现农业生产全过程的信息感知 精准管理和智能控制的一种全新的农业生产方式 可实现农业可视化诊断 远程控制以及灾害预警等功能
  • 时序预测:使用MATLAB实现时间序列回归中的偏差估计

    时序预测 使用MATLAB实现时间序列回归中的偏差估计 时间序列数据分析是指对某个时间段内连续的数据进行建模和预测的过程 在时间序列分析中 通常需要进行时序预测 即预测未来的数据值 时间序列回归是一种在保持时间序列结构的同时 通过相关数据来
  • 性能测试项目实战:应用加载慢该怎么办?

    一 背景 app收到留学push 课堂 资讯 用户点击push消息 进入app 应用加载很慢 容易出现应用假死 app崩溃或提示网络异常等信息 给用户体验十分不友好 监控阿里云资源tcp连接数飙高 cpu打满 自愈能力 系统恢复能力 低 二