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

news2024/11/16 23:35:47

 背景  

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

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

果你想学习性能测试,我这边给你推荐一套视频,这个视频可以说是B站百万播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:点击文章最下方官方推出链接即可进群领取资料

15天学会性能测试,通俗易懂详细教学,Jmeter性能测试实战(集群压测,全链路压测,性能调优,瓶颈分析)极速掌握,干就完事!_哔哩哔哩_bilibili15天学会性能测试,通俗易懂详细教学,Jmeter性能测试实战(集群压测,全链路压测,性能调优,瓶颈分析)极速掌握,干就完事!共计27条视频,包括:1.【性能测试】什么是性能测试以及性能测试的价值和目的、2.【性能测试】真实企业性能测试指标详解以及指标测算、3.【性能测试】真实企业中性能测试流程以及细节剖析等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV1B14y1D7X9/?spm_id_from=333.337.search-card.all.click

 分析  

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排查线程,发现是底层框架导致。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/634654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx运行原理与基本配置文件讲解

文章目录 Nginx基本运行原理Nginx的基本配置文件serverlocationroot 与 alias 的区别server 和 location 中的 rootnginx欢迎页 本文参考文章Nginx相关文章 Nginx基本运行原理 Nginx的进程是使用经典的「Master-Worker」模型,Nginx在启动后&#xff0c;会有一个master进程和多个…

docker-compose编排容器

系列文章目录 文章目录 系列文章目录一、docker-compose1.Docker Compose2.YAML 文件格式及编写注意事项3.安装docker-compose4.Docker Compose配置常用字段 二、创建compose1.准备依赖文件2. 总结 一、docker-compose 1.Docker Compose 如果需要定义多个容器就需要服务编排。…

priority_queue的模拟实现

前言 优先级队列听名字好像与队列有关&#xff0c;但是实际上&#xff0c;与队列没有很多关系&#xff0c;它也是容器适配器&#xff0c;是通过vector来适配的&#xff0c;但是里面又加入了堆的调整算法。跟栈和队列又有一些不同&#xff0c;了解它的实现对于我们更好的掌握它是…

新手上路,安全驾驶,做行车安全的第一责任人

目录 一、生活与汽车二、树立安全意识三、掌握驾驶经验四、参考材料 道路千万条&#xff0c;安全第一条&#xff0c;行车不规范&#xff0c;亲人两行泪。 ——《流浪地球》 一、生活与汽车 开车是为了节省在路途上花费的时间&#xff0c;片面的追求交通效率会引发交通安全问题&…

day8 栈顶的种类与应用

目录 多寄存器访问指令与寻址方式 多寄存器内存访问指令 多寄存器内存访问指令的寻址方式 ​编辑 栈的种类与使用 栈的概念 栈的分类 栈的应用举例 叶子函数的调用过程举例 多寄存器访问指令与寻址方式 多寄存器内存访问指令 MOV R1, #1 MOV R2, #2 MOV R3, #3 MOV R…

Redis 持久化存储机制:RDB 和 AOF

Redis&#xff08;Remote Dictionary Server&#xff09;是一个高性能的键值存储系统&#xff0c;它可以将数据存储在内存中以实现快速访问。为了保持数据的持久性&#xff0c;Redis 提供了两种数据持久化方法&#xff1a;RDB 和 AOF。 RDB&#xff08;Redis Database&#xff…

spring源码-代码的特殊写法

spring源码-代码的特殊写法 前言 在阅读spring源码中&#xff0c;可能会有很多种代码写法在工作中都没遇见过&#xff0c;阅读起来有一定的难度&#xff0c;在本文中&#xff0c;我会把我认为有难度的代码写法拿出来&#xff0c;并举例子说明清楚&#xff0c;方便大家阅读并理…

股价暴涨59%后,美股二手车平台Carvana在短期内还会进一步上涨?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 Carvana(CVNA)股票在财报发布近一个月后又重新开始出现了上涨。 仅6月9日就上涨了59%。 相对于纳斯达克综合指数的上涨幅度&#xff0c;Carvana今年迄今为止的上涨幅度已经比纳斯达克综合指数高出了约400%。 Carvana最…

RabbitMQ - 死信队列,延时队列

Time-To-Live and Expiration — RabbitMQ 一、死信队列 Dead Letter Exchanges — RabbitMQ 死信队列&#xff1a; DLX 全称&#xff08;Dead-Letter-Exchange&#xff09;,称之为死信交换器&#xff0c;当消息变成一个死信之后&#xff0c;如果这个消息所在的队列存在x-d…

全球、全国遥感土地利用数据产品下载(1m、10m、30m分辨率,内含链接与详细教程)

土地利用/覆被数据能够获取地表覆被信息&#xff0c;同时也是地球系统科学学科的基础数据&#xff08;如生态、水文、地质等&#xff09;吗&#xff0c;目前&#xff0c;基于遥感生成的土地利用/覆被数据产品比较多样&#xff0c;本文整理了目前应用比较多的7种数据产品进行介绍…

Hazel游戏引擎(007)Premake

文中若有代码、术语等错误&#xff0c;欢迎指正 文章目录 前言操作步骤premake写lua脚本文件执行premake.exe文件效果 前言 此节目的 由于之前配置VS项目各项属性需要根据不同平台手动一个一个设置&#xff0c;很麻烦&#xff0c;缺乏灵活性。 用lua脚本配置项目属性&#xff0…

基于Java+SpringBoot的鞋类商品购物商城系统设计与实现

博主介绍&#xff1a;✌擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案…

业务部门的通病:想搞了大而全的软件

业务部门的通病&#xff1a;想搞个大而全的软件 怎么样评价软件功能的价值重要性&#xff1f; 软件的消耗成本是惊人的 中小企业一定要约束需求 做SaaS的香港上市公司有赞&#xff08;做商城软件&#xff09; 10年了还在亏损 趣讲大白话&#xff1a;大而全的功能是陷阱 【趣讲信…

Geek-PC项目 文档

一款后台管理项目 - React-geek-PC 项目介绍 ● 项目功能演示 - 登录、退出 - 首页 - 内容&#xff08;文章&#xff09;管理&#xff1a;文章列表、发布文章、修改文章● 技术 - React 官方脚手架 create-react-app - react hooks - 状态管理&#xff1a;mobx - UI 组件库…

ESP32网络应用 -- ESP32-S3在STA模式下创建TCP-CLIENT应用程序

在ESP32-S3初始化为Station模式并且成功获取IP地址后,说明ESP32-S3芯片的底层设施已经具备Wi-Fi网络通信能力,但在实际的应用场景里面,仅仅建立数据链路层,还是不能够满足应用程序的数据通信需求。 TCP/IP是一种使用广泛的网络传输协议,网络上并不缺乏关于TCP/IP的具体原…

Atcoder Beginner Contest 304——A-D题讲解

蒟蒻来讲题&#xff0c;还望大家喜。若哪有问题&#xff0c;大家尽可提&#xff01; Hello, 大家好哇&#xff01;本初中生蒟蒻讲解一下AtCoder Beginner Contest 304这场比赛的A-D题&#xff01; A - First Player 题目描述 Problem Statement There are N N N people nu…

sequence2sequence

1. 基本模型 所谓的Seq2seq模型从字面上理解很简单&#xff0c;就是由一个序列到另一个序列的过程(比如翻译、语音等方面的应用)&#xff1a; 那么既然是序列模型&#xff0c;就需要搭建一个RNN模型(神经单元可以是GRU模型或者是LSTM模型) 下面两篇文章提出了这样的seq2seq的模…

NVM安装教程

我是小荣&#xff0c;给个赞鼓励下吧&#xff01; NVM安装教程 简介 nvm 是node.js的版本管理器&#xff0c;设计为按用户安装&#xff0c;并按 shell 调用。nvm适用于任何符合 POSIX 的 shell&#xff08;sh、dash、ksh、zsh、bash&#xff09;&#xff0c;特别是在这些平台…

ChatGPT 五个写论文的神技巧,让你的老师对你刮目相看!

导读&#xff1a;ChatGPT这款AI工具在推出两个月内就累积了超过1亿用户。我们向您展示如何使用ChatGPT进行写作辅助&#xff0c;以及其他一些有用的写作技巧。 本文字数&#xff1a;2000&#xff0c;阅读时长大约&#xff1a;12分钟 ChatGPT这款AI工具在推出两个月内就累积了超…

【Java|golang】2460. 对数组执行操作

给你一个下标从 0 开始的数组 nums &#xff0c;数组大小为 n &#xff0c;且由 非负 整数组成。 你需要对数组执行 n - 1 步操作&#xff0c;其中第 i 步操作&#xff08;从 0 开始计数&#xff09;要求对 nums 中第 i 个元素执行下述指令&#xff1a; 如果 nums[i] nums[i…