性能测试-并发测试心得

一些关键名词

吞吐量

指的是在一定时间内系统处理请求或传输数据的能力,具体到性能测试中的话,就是指单位时间内系统处理并完成的请求数量或者是系统传输的数据量。

例如,吞吐量可以表示为系统每秒处理HTTP请求次数,或者是系统每秒钟完成的事务数量(TPS)。

这个指标很大程度体现了系统的处理效率和负载承载能力。

对于这个指标,影响其的因素与CPU、磁盘的I/O紧密相关。

例如,一个Web应用在每次请求时都会去查询数据库,在并发数增加后,数据库就会占用大量CPU和磁盘的I/O资源,就会导致其他的软件被迫等待数据库执行完后才能使用CPU,如果是这种情况,那么这个Web应用的接口设计就存在一定问题,吞吐量就不会太高

响应时间(Response Time,RT)

指的是从客户端发起一个请求到服务器处理完成并返回响应结果所需要的时间间隔,简单来说,就是客户端从发起请求到收到响应的过程。这个时间会包括下述阶段:

  1. 网络传输时间:请求在网络中传播到服务器所需的时间

  2. 服务器处理时间:服务器接收到请求后,对其进行解析、执行业务逻辑以及数据处理所需的时间

  3. 数据库查询时间:如果涉及到数据库操作,那么还包括数据库查询和返回结果所需的时间

  4. 生成响应时间:服务器构建并准备响应数据所需的时间

  5. 网络返回时间:服务器将响应数据传回客户端所需的时间

在进行性能测试的时候,对于这个指标通常会关注最小响应时间、最大响应时间和平均响应时间,以及特定百分比(如90%、95%或99%)的响应时间

image.png

  1. 最小响应时间: 这个指标表示在测试期间所有请求中响应最快的情况,用于了解系统在理想状态下处理请求的能力。但单一的最小值并不能代表整体性能,因为实际运行环境中的大多数请求可能并不会达到这个速度

  2. 最大响应时间: 最大响应时间反映出系统处理请求最慢的情况。如果最大响应时间过高,说明系统存在明显的性能瓶颈或异常情况,这直接影响用户体验,需要重点排查和优化

  3. 平均响应时间: 平均响应时间是所有请求响应时间的算术平均值,它提供了一个总体上系统的平均处理速度。然而,平均值容易受到异常值的影响,如果系统中有极快或极慢的响应时间,平均值可能无法准确反映大部分请求的真实响应情况

  4. 特定百分比的响应时间(如90%, 95%, 99%): 这些统计值代表了在所有响应时间中,有相应百分比的请求响应时间小于等于该值。例如,90% 表示有90%的请求响应时间不超过该数值。这些统计数据对于理解和改善用户体验非常关键,因为它们揭示了大部分用户(或请求)的实际响应时间情况,尤其是95%和99%常被用来衡量系统的尾部延迟和性能瓶颈

TPS

通常指的是一秒钟内系统成功处理事务的数量,这里的事务可以是一次登录、一次交易、一次网页加载等。

通过TPS可以了解到系统在不同负载条件下的处理能力上限,可以通过这个指标的突然改变来判断“拐点”(详见下文)

PV和UV

PV(Page VIew):指的是每一次页面查看或页面访问。每当用户访问网站的一个页面时,无论该用户是首次访问还是刷新同一个页面,都会被计为一个PV。PV反映的是网站内容被访问的总次数,是衡量网站流量规模和受欢迎程度的一个重要指标。如果一个网站一天内被访问了1000个页面,那么这一天的PV就是1000

UV(Unique Visitor):指的是独立访客数,即在一定统计周期内访问网站的不同用户数。通过识别浏览器的Cookie或IP地址等信息来区分不同的访问者。即使同一位用户在一天内多次访问网站,也只会计入一个UV。UV强调的是访问网站的人数而非访问次数,它能更准确地反映网站的受众群体大小。

PV着重于网站内容被访问了多少次,而UV则是关注有多少不同的个体访问了网站。在评估网站流量和用户黏性时,PV和UV都是非常重要的统计指标。

为什么需要性能测试?

简单而言:

  1. 追求更大的并发(担心用户太多,搞垮系统)

  2. 追求更短的响应时间(觉得系统太慢)

  3. 追求更低的成本(降低服务器配置)

具体而言:

  1. 评估系统容量和性能极限。例如,电商平台在大型促销活动期间(如双十一)可能面临数十倍于平时的用户访问量。通过性能测试,可以模拟这种高并发场景,预估系统在短时间内处理大量请求的能力。假设测试结果显示系统在10万并发用户下仍能保持稳定的响应时间和较高的TPS,那么平台就能有信心应对实际促销期间的大流量冲击。

  2. 发现和解决系统瓶颈。例如,一款多人在线游戏进行性能测试时,随着玩家人数的增加,数据库查询、网络通信、服务器CPU和内存使用率可能会上升。一旦到达某个阈值,响应时间可能急剧增加,这表明系统存在瓶颈。通过性能测试定位问题,比如发现数据库查询优化不足,进而调整索引、缓存策略或升级硬件设施来解决问题。

  3. 指导系统优化和扩展。例如,个企业级内部应用在新功能上线前进行性能测试,发现随着并发用户数增加,系统的吞吐量并未按预期线性增长。经过分析,发现是因为某种业务逻辑造成了大量线程阻塞,通过优化代码结构和采用异步处理方式,使得系统在同等资源条件下处理更多请求,提高了系统的可扩展性。

  4. 成本效益分析。企业在选择云服务提供商时,可以通过性能测试比较不同云服务方案的成本效益。例如,通过测试确定在何种资源配置下既能满足业务需求又能最大程度节省成本,避免过度配置资源导致浪费,或资源不足导致用户体验下降。

性能测试需要得到怎样的结论?

性能指标

  • 接口在不同并发用户数的响应时间。例如,在并发用户数从100增加到1000的过程中,接口的响应时间可能从最初的100ms增加到500ms,表明随着并发用户的增多,系统的响应速度在降低。

  • TPS。例如,在并发 用户数为500时,系统的TPS能达到1000,但是当并发用户数为1000时,系统的TPS仅提升到了1200,说明在这个区间中,系统的可扩展性有限,接近饱和点。

  • 并发用户数与响应时间、吞吐量的关系曲线。通过图形,可以更加的直观的看出随着并发数增加到什么程度的时候,系统的TPS开始下降。

系统瓶颈

  • CPU、内存、磁盘I/O、带宽等

例如,对于两个Web应用,他们都用于处理用户上传的图像并进行实时处理(如缩放、裁剪等)和存储到数据库。

A应用在高并发的情况下,能始终保持50%以下的内存占用,CPU在高峰期也能维持在60%以下

B应用在高并发的情况下,会经常触发垃圾回收机制,会导致响应时间增加,CPU峰值常在95%以上,就会导致大量数据库的I/O操作需要等待,进一步增加响应时间

那么B应用暴露的问题可能就是:

  1. 创建了需要不必要的对象,导致内存占用高,频繁触发垃圾回收机制,也可以使用更加高效的垃圾回收机制

  2. 可能有密集型的CPU操作,应该进行减少密集型操作,使用多线程、异步等方式来分散CPU负载

  3. 数据库有大量I/O操作,可以考虑优化数据库查询语句、引入数据库缓存机制、采用读写分离或分布式数据库方案等手段降低磁盘I/O带来的性能瓶颈

稳定性和可靠性

  • 在高并发的场景下,系统是否会出现错误,例如死锁、超时

  • 以及处理高并发后是否会清理一些环境数据?例如,在高并发场景下,系统处理完大量请求后,应确保没有遗留的打开文件、数据库连接未关闭,以及内存泄露等问题,这对于系统的长期稳定运行至关重要

影响性能测试的因素有哪些?

并发访问方式

  • 一次性全部并发

  • 阶梯式增长并发

  • 持续稳定并发

系统资源

  • 服务器的硬件配置:CPU、内存、磁盘等物理资源,可能会在高并发的时候,进行I/O资源的抢夺,从而影响并发结果

  • 针对于查询类或修改类的接口,数据库也会影响并发测试,例如数据量大小、索引效率、锁机制、是否缓存

  • 线程池大小、连接池的管理,都会影响并发结果

当然,如果在不同的并发测试中上述内容没有被修改,那么上述内容也不是当次并发测试的影响因素

如何确定接口或者系统可以从哪些方面进行优化?

Jmeter如何快速确定拐点?

拐点

这个概念最开始是从性能测试的图形化结果中引申出来的,可以很显然的看到某个指标从一种状态到另一种状态的关键时刻

具体来说,在进行压力测试的时候,随着并发的用户数的增加,系统的吞吐量(或TPS),一开始可能会随着负载的增长而增长,但当达到某个特定的负载水平时,系统的性能就不会再按比例提升,甚至开始下降。

此时,系统的响应时间会明显增加,错误率可能也会随之增高,这个曲线的由增变缓或由降变增的转折点就被称为“拐点”

实例

接口文档

对单个接口进行压测,测试出一些关键数据

接口:https://keewood-v2-service.t.cn-shenzhen.aliyun.kkgroup.work/v4/console/dictionaries/{id}

文档:https://teamshare.t.cn-shenzhen.aliyun.kkgroup.work/application/DT001/automated_testing/template/view/auto_test_api_manage?projectid=613331460681805825&cid=620940619036807169

Jmeter脚本

image.png

image.png

可以通过这种方式,能够一次性知道不同的并发情况下的数据,通过对比就能知道拐点在哪里

image.png

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

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

相关文章

服务器git安装python包失败,如何手动下载github项目包并安装到虚拟环境中(简单易懂)

背景: 想要复现一个项目,建立好虚拟环境后,准备安装项目需要的包,故输入命令pip install -r requirements.txt requirements.txt如下图 其他包我都安装成功了,只有最后一个包失败了,是需要服务器git链接…

【学习心得】解决无限debugger的常用方法

一、什么是无限debugger 有些网站为了防止爬虫或其他恶意行为,会故意设置无限debugger作为一种简单的反爬机制,它会在开发者工具打开的情况下不断暂停执行。这对于想要分析其他代码逻辑、排查问题或进行正常开发调试工作的开发者来说极为不便。 二、解决…

Sora学习笔记

Sora - 探索AI视频模型的无限可能 随着人工智能技术的飞速发展,AI视频模型已成为科技领域的新热点。而在这个浪潮中,OpenAI推出的首个AI视频模型Sora,以其卓越的性能和前瞻性的技术,引领着AI视频领域的创新发展。让我们将一起探讨…

ios 使用window.location.href 不能跳转微信短链处理过程以及解决方法

需求背景: 由h5提供页面,通过后台请求微信api生成对应的schemal短链,该h5页面嵌入到原生的ios以及安卓app上,当用户点击后通过短连接跳转到其他小程序中 以下为生成微信scheme代码示例,生成后短链为:weixi…

Azure[Sky] Dynamic Skybox

Azure[Sky] Dynamic Skybox是一个完整而稳健的天空系统,它可将你的项目提升大到其他层次。 Azure[Sky] 不仅适合使用现实图片的项目,事实上,该系统用在风格化图片的项目也很不粗,甚至效果更好。使用 Azure,每种风格都能实现最佳效果。 性能: 在开发此资源的过程中,性能是…

【Android】属性动画

在属性动画出现之前,Android 系统提供的动画只有帧动画和 View 动画。View 动画我们都了解,它提供了 AlphaAnimation、RotateAnimation、TranslateAnimation、ScaleAnimation 这4种动画方式,并提供了 AnimationSet 动画集合来混合使用多种动画…

35. 【Linux教程】Linux 修改用户组

前面小节介绍了如何添加用户组,本小节介绍如何给已经添加的新用户组修改信息,从 /etc/group 文件信息可以看到,用户组的信息比用户信息项少,和 usermod 命令类似,用户组的信息可以使用 groupmod 命令修改。 1. groupmo…

为了董宇辉,老婆跟我打起来了!写下一份深刻检讨

两个月前,因为讨论董宇辉小作文事件,跟老婆吵起来了。起因就为了两句话,写了这份检讨!给大家分享一下。 老婆在网上刷了两晚关于董宇辉小作文的视频,一直为董宇辉喊冤、打抱不平。起初,我跟老婆的想法&…

怎样消除视频上的字幕和文字?3个方法值得推荐

怎样消除视频上的字幕和文字?消除视频上的字幕和文字不仅是一个常见的需求,更是一个对视频内容质量提升的关键步骤。特别是在处理从网络下载的带有水印或标识的视频时,这些额外的文字和信息往往会干扰观众的观看体验,甚至可能影响…

【数据结构】顺序表和链表的对比,在各种情况下如何选择

顺序表详细内容: 【数据结构】线性表 顺序表(动态、静态分配,插入删除查找基本操作)解析完整代码 单链表详细内容: 【数据结构】单链表解析完整代码(插入、删除、尾插法、头插法、按值和按位查找、前插和后…

IDEA开发环境的安装与编写第一个程序

1.下载 IDEA(全称IntelliJ IDEA)是用于Java程序开发的集成环境(也可用于其他语言),它在业界被公认是最好的Java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代…

Mamba与MoE架构强强联合,Mamba-MoE高效提升LLM计算效率和可扩展性

论文题目: MoE-Mamba: Efficient Selective State Space Models with Mixture of Experts 论文链接: https://arxiv.org/abs/2401.04081 代码仓库: GitHub - llm-random/llm-random 作为大型语言模型(LLM)基础架构的后…

新一代科学计算与系统建模仿真平台MWORKS 2024a震撼发布:产品强势进化,更新亮点速览!

2月25日,同元软控成功举办MWORKS 2024产品发布会,会上公布了新版MWORKS的设计理念、关键技术、版本亮点、产品特性以及重大改进。当前,科学计算与系统建模仿真平台MWORKS 2024a已正式上线,开放下载。 MWORKS已成为全球第4个完整的…

C# 高阶语法 —— Winfrom链接SQL数据库的存储过程

存储过程在应用程序端的使用的优点 1 如果sql语句直接写在客户端,以一个字符串的形式体现的,提示不友好,会导致效率降低 2 sql语句写在客户端,可以利用sql注入进行攻击,为了安全性,可以把sql封装在…

嘉立创专业版导入SW模型的板框

1、SW新建一个需要的模型,例如下图, 2、点击另存为.dxf 文件(是.dxf文件) 3、选择要保存模型的视图,如上视图,确定后出现上视图板框形状,然后保存即可。 4、打开嘉立创,点击文件——…

整数编码【华为OD机试-JAVAPythonC++JS】

题目描述 实现一种整数编码方法,使得待编码的数字越小,编码后所占用的字节数越小。 编码规则如下: 编码时7位一组,每个字节的低7位用于存储待编码数字的补码 字节的最高位表示后续是否还有字节,置1表示后面还有更多的字节&#xf…

日志系统项目实现

日志系统的功能也就是将一条消息格式化后写入到指定位置,这个指定位置一般是文件,显示器,支持拓展到数据库和服务器,后面我们就知道如何实现拓展的了,支持不同的写入方式(同步异步),同步:业务线程自己写到文…

万卡集群:字节搭建12288块GPU的单一集群

文章目录 论文Reference 论文 MegaScale: Scaling Large Language Model Training to More Than 10,000 GPUs 论文链接:https://arxiv.org/abs/2402.15627 从结构上讲,网络是基于Clos的“胖树”结构。其中一个改进是在顶层交换机上把上行与下行链路分开&…

三、《任务列表案例》前端程序搭建和运行

本章概要 整合案例介绍和接口分析 案例功能预览接口分析 前端工程导入 前端环境搭建导入前端程序 启动测试 3.1 整合案例介绍和接口分析 3.1.1 案例功能预览 3.1.2 接口分析 学习计划分页查询 /* 需求说明查询全部数据页数据 请求urischedule/{pageSize}/{currentPage} 请…

stm32触发硬件错误位置定位

1.背景 1. 项目中,调试过程或者测试中都会出现程序跑飞问题,这个时候问题特别难查找。 2. 触发硬件错误往往是因为内存错误。这种问题特别难查找,尤其是产品到了测试阶段,而这个异常复现又比较难的情况下,简直头疼。…