首页 > 其他分享 >如何正确定义性能瓶颈

如何正确定义性能瓶颈

时间:2024-03-09 11:00:57浏览次数:26  
标签:定义 瓶颈 性能 功能测试 压测 测试 性能指标 正确

有同学留言问我:如何得到精确的性能瓶颈?

相比于问我怎么造测试数据,用什么压测工具监控工具的问题,我更喜欢这个问题。为什么呢,因为在我的理解里,工具的使用依然是入门难度,熟练使用哪个工具并不会改变性能测试这一技术实践的最终结果,差别只是效率高低的问题。

而对于性能瓶颈的准确定义,反而会影响性能测试最终的结果,并对后续的性能优化验证产生直接影响。

这篇文章,聊聊我对于性能瓶颈的理解和实践经验。

 

性能测试和功能测试在本质上没有区别,大体的流程也没差,无非是分析需求,准备用例、执行用例、确认BUG、跟进修复验证,最终出具测试结果/报告。

两者的不同点在于,侧重不一样:功能测试侧重需求的正确实现,性能测试更注重系统的处理能力是否能支撑真实的用户访问。

在功能测试开展前,我们会分析需求,确认需求要实现的功能最终是什么表现形式,以便于设计测试用例和预期结果,性能测试同样如此。

在性能测试开展之前,依然要分析需求,确认预期的性能指标,即当系统达到什么指标的情况下,可以支撑线上业务的用户访问,而性能瓶颈,对应的则是未达到预期性能指标。

网上充斥着太多的水文,讲了太多错误的性能测试方法,荼毒了不少人。比如用高并发把服务器资源使用率压上去,直到服务挂了,这个时候的性能测试结果就是所谓的性能瓶颈;再比如当RT明显上升和出现请求报错时,就到性能瓶颈了。诸如此类,误人子弟。

 

什么是性能瓶颈?一句话概括:在给定条件下未达到预期性能指标,就是性能瓶颈

需求:创建订单场景,服务器配置4C8G,预期性能指标是单机在CPU使用率40%以下时,TPS>200&99RT<200ms。这个时候的预期性能指标是什么?

答案:单机CPU%<40%+TPS>200+99RT<200ms,这就是预期性能指标。

其中的给定条件,业务场景是创建订单,服务器配置是4C8G,环境配置是单机服务器。

分析完需求后,接着该做什么呢?按要求搭建压测环境,根据创建订单的业务场景准备对应的测试数据,然后找个压测工具编写脚本,同时部署好监控,以便压测时可以实时观察性能指标的变化。

如果在给定条件下,性能表现符合预期指标,那就是不存在性能瓶颈。如果性能表现未达到预期指标,就出现其他问题,比如请求超时、报错率较高、内存资源耗尽,则判断存在性能瓶颈。

然后就是根据具体的问题具体分析,逐一排查,修复后再次进行压测验证,直至达到预期结果。

 

很多刚学习性能测试的同学都对性能测试有个误解,那就是我一定要把服务器资源压满,或者一定要让它出现RT拐点才表明到了性能瓶颈,其实并不是这样。

无论是功能测试还是性能测试,工作开展的前提一定是需求说明。通过需求分析确认测试场景,预期结果,然后针对性的设计测试用例,执行用例进行验证。至于你是手动点点点还是利用工具自动执行,本质上对测试结果没有影响。

当然,对于刚开始入门学习性能测试的同学来说,确实很容易犯一些基础的常识性错误,如果有一定的项目实践经验,就会知道性能测试比我们想象的要复杂得多。

除了对技术的广度和深度有一定要求之外,对业务的熟悉程度,对需求和场景的分析理解能力,甚至在压测实施过程中的沟通和协调能力,也有较高的要求。

标签:定义,瓶颈,性能,功能测试,压测,测试,性能指标,正确
From: https://www.cnblogs.com/imyalost/p/18062387

相关文章

  • P4139 上帝与集合的正确用法 题解
    传送门我觉得这题最有意思的其实是"最终会固定为一个数"这个结论。扩展欧拉定理:\(a^b\bmodp\),当\(b\ge\varphi(p)\)时,\(a^b\equiva^{b\bmod\varphi(p)+\varphi(p)}\pmodp\)。所以\(2^{2^{2^{\cdots}}}\)可以递归求解。边界条件\(p=1\)。复杂度如何保证?其实就是......
  • ChatGPT 正确使用 prompt
    ChatGPT正确使用prompt什么是promptprompt可以提问或指导像ChatGPT这样的语言模型输出的过程,它允许用户控制模型的输出,生成符合其特定需求的文本。prompt公式prompt公式是prompt的特定格式,通常由三个主要元素组成:任务:明确而简洁地陈述prompt要求模型生成的内容。指......
  • vue常量定义以及使用
    在Vue项目中,您可以在JS文件中定义常量,然后通过 Vue.prototype 在 main.js 中定义这些常量为全局变量,以便在Vue组件中直接使用。以下是如何实现这一点的步骤:定义常量首先,创建一个JS文件来定义您的常量。例如,您可以创建一个名为 constants.js 的文件,并在其中定义......
  • Istio中的核心资源及定义
    Istio的核心资源主要包括以下几种:1.Gateway用于建模边缘网关,可以为进入或离开网格的流量提供专用的入口和出口点。Gateway定义了在网格边缘运行的负载均衡器,用于接收传入或传出的HTTP/TCP连接。然后,它将接收到的连接路由到目标地址,该地址可以是网格内的服务,也可以是网格......
  • 用promise定义方法时如何避免 自执行/周期影响 多次执行问题:将promise作为方法的回调
    如果你在Promise内部定义了异步操作,并希望避免Promise在创建时自动执行,你可以将这些异步操作封装在一个函数内,并在需要时调用该函数。这样可以确保在适当的时机执行异步操作,而不是在Promise对象创建时或周期更新时(会重新定义变量)立即执行。 以下是一个示例,演示了如何在Promise......
  • pycharm进入函数定义快捷键
    在PyCharm中,你可以通过使用快捷键来快速进入函数,而不必通过鼠标点击。以下是几个常用的快捷键:用鼠标选择函数后:Ctrl+B:进入函数的定义。Ctrl+Alt+B:进入函数的实现(如果有的话)。Ctrl+Shift+I:查看函数的文档字符串。Ctrl+Shift+T:打开一个弹出窗口,可以快速定位和......
  • vue项目引入自定义svg
    图标可以使用element-ui的图标库、第三方的图标库或者引入svg使用,这里是讲如何使用自定义的svg。将SVG图标放入项目 自定义的svg可以访问 https://www.iconfont.cn地址,搜索你想要的图标,下载SVG格式,放入项目的src/assets/icons/svg文件夹中。并在src/assets/icons/index.js......
  • 向TreeView添加自定义信息
    可在Windows窗体TreeView控件中创建派生节点,或在ListView控件中创建派生项。通过派生可添加任何所需字段,以及添加处理这些字段的自定义方法和构造函数。此功能的用途之一是将Customer对象附加到每个树节点或列表项。虽然此处的示例是关于TreeView控件的,但该方法同样......
  • 最小瓶颈路
    Decribe:给定一个\(n\)个点\(m\)条边的无向连通图,编号为\(1\)到\(n\),没有自环,可能有重边,每一条边有一个正权值\(w\)。给出\(q\)个询问,每次给出两个不同的点\(u\)和\(v\),求一条从\(u\)到\(v\)的路径上边权的最大值最小是多少。\(n\leq10^3,m\leq10^5,......
  • Mysql和Oracle自定义函数区别
    1.Mysql自定义函数dropfunctionifexistsget_date;createfunctionget_date(v_datetimedatetime,v_timevarchar(50))returnsvarchar(50)begin declarev_datevarchar(50); declarecDatevarchar(50); declarebeginDatevarchar(50); setcDate=date_format(......