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

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(使用前将#替换为@)

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

随机推荐

  • 动手学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打满 自愈能力 系统恢复能力 低 二