我眼中的性能测试

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 我眼中的性能测试

640.png

笔者专注性能测试的时间大概有5年时间,其间也经历了性能测试主流工具从LR到Jmeter转变,监控工具从最早的Linux原生命令到界面花里胡哨的Glances、Zabbix等等。技术架构从单一的节点到多集群,业务对性能的要求越来越高,对于性能测试,有一点小的体会,后续会分多篇来聊聊。今天先说说我对性能测试的一些感观。

友情提醒,文末有福利哦!


01

性能测试的目标



看到这个小标题,大家一定都有很多自己的认知和看法,我会从两个方面进行简单的归纳:技术目标和业务目标。


对于技术目标,大概有4点需要我们去追求和改进的:

  1. 评估性能,定性分析:这个也是我们做性能的测试的初衷,当我们想要了解某个业务系统的性能状况时,我们会从各类已知的指标入手,常见的有TPS(每秒处理业务数)、ART(响应时间)、系统资源使用率等等。通过技术手段的优化,提升这类指标,给产品以信心,能够应对可能到来的流量洪峰。

  2. 明确参数配置:我们现在会大量地使用各类中间件、技术组件来解耦我们的系统,其中会涉及大量的参数配置信息。以前一直会有人问“Tomcat的最佳配置参数是多少,XXX参数应该怎么配置才合理呢”这类的问题。本质上,这类问题是没有定值的,需要我们结合业务一起去调整。最典型的,就是线程数的配置,各类中间件大多都有线程数配置,并不是配置越多越好,配置多了,浪费内存,配置少了,增加时间消耗,这个值需要有全局视角,结合业务架构进行统一的配置,否则单节点配置得再高,也不会达到预期值,因为有可能上游就不会有那么多线程流到你的这个节点上来。

  3. 获取扩展参数,做好预做一次好的、完整的性能测试,一定不是简单的给出一个TPS那么简单,对于高阶性能测试,我们都会要求测试出性能拐点在哪里,达到拐点时,瓶颈点是什么。为什么要关注这个呢?因为从高层的角度看,他们更关注的是什么情况下,需要我做扩容,先扩什么东西,以便系统能够撑过流量的高峰,这样对业务才会更有意义。

  4. 提升各种利用率:这个其实是最后的价值。在以前服务器本成比较昂贵的时候,我们会想办法尽可能的提升服务器的利用率,节约成本。但是现在,伴随着各种云,服务器成本在直线下降,我们面对的是更多业务的不确定性,所以前面三点就变得更加重要,提升利用率反倒显得没那么重要了。不过,如果真的做好前面三点,那利用率自然而然的也会上去,不用特意去纠结。

对于业务目标,主要有两点目标:

  1. 业务稳定性:这个是我们做性能测试的基本盘,本质上我们做各类测试都是为了维护业务的稳定性,通过性能测试,系统在面对流量洪峰时,能够平稳过渡,是性能测试的最大目标。

  2. 更好的用户体验:1秒的等待时间和5秒的等待时间,对用户的体验是完全不同的,因此,我们需要提升系统性能,来给用户更好的使用体验,让用户操作更丝滑、更顺畅,提升产品的友好度。


02

技术层面的支撑



性能测试是一个对技术的全面性要求非常高的测试能力,需要从业者具备较广泛的知识体系,能够通过各类监控指标,准确定位到系统瓶颈。所以需要扎实的技术功底,主要有以下三类:


1. 计算机原理:这是很多人都忽略的一件事,现在想要从事性能测试人员,大多数更关注于技术侧的提升,而忽略了最底层计算机原理,实际上这个才是根本,代码的运行,最终还是离不开CPU和内存。建议大家读读《性能之巅》、《深入理解计算机系统》。嗯,这两本书都很容易劝退你,加油。


2. 常见用技术组件:这类组件就非常多了,需要大家结合自己公司的技术架构选型去做针对性的学习,后续有机会展开来讲一些常用的。主要关注的内容是他们的实现原理是什么,如何构建通信通道,常见的错误使用有哪些,如何避免等等,这些网上的资料非常多,需要自己去尝试和验证是否正确。


3. 常见的数据存储组件:以前我们经常会说,性能问题80%出现数据层,对于数据库,我们会非常关注SQL的执行效率。现在的数据存储组件越来越多,Nosql、ES等等,需要大家根据实际需要去做针对性的学习。


03

非技术层面的支撑



除了技术层面的支撑外,为了更好地开展性能测试,我们还需要一些非技术的软技能来支撑日常的工作。主要有两个方面:


1. 分析方法论:面对各种各样的监控指标,我们如何快速地找到对自己有用的信息?一般的性能测试分析方法有分段、分层及二分法。分段和分层比较好理解,在很多地方我们也会用到,比如很多技术框架都提倡分层,每个层专注做自己的事。性能分析也一样,我们可以对被监控系统做好分层,然后逐步定位,缩小范围。


二分法主要用于快速定位并发数,例如当你发现产生1000的并发时,系统已经处理不过来了,这时候你就需要变成500(取1000的一半,看是处到上半部分还是后半部分),然后750(如果在上半部分,就再取一半,以此类推,是不是和排序很像?)。


2. 经济学基础:很多人会好奇做性能测试和经济学有什么关系。举个例子,性能优化,最终还是会回归到是用空间换时间(比如用内存处理数据),还是用时间换空间的问题(上传附件、分页查询)上来,这里面需要做一些动态的平衡,如何做取取舍,是调优时,需要我们去考虑的。

还有一个,就是边际递减问题,大家应该会发现,随着性能测试优化的不断深入,优化越来越难,结果也越来越不明显。前期你可能加个索引,性能就提升了几十倍,但到了后期,你改的代码越多,性能的提升反而不明显。理论上性能测试可以一直进行下去,但实际上后续的优化成本可能会非常高,需要我们在适当的时机停止优化。



04

小结



性能测试是一个庞大而复杂的工程,我们需要以终为始,明确每次性能优化的目标是什么,控制好成本问题,同时需要在平时注意积累各类技术体系,更应当关注技术的底层原理是什么。结合一些常用的分析方法论,快速定位问题。


直播预告

本周三4月27日9点,约了CC和老张一起聊性能测试体系建设和落地的话题,欢迎大家到时候关注。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
26天前
|
测试技术
性能测试包括哪些方面?
性能测试是评估电力系统响应时间、吞吐量和资源利用率的关键步骤,确保系统在不同负载下表现良好。它包括响应时间、吞吐量、资源利用率和稳定性测试,通过负载、压力、基准和故障恢复测试来检验系统性能。性能测试对于系统正常运行、问题发现及优化升级至关重要。
性能测试包括哪些方面?
|
2月前
|
SQL 中间件 Java
性能测试的理解误区
性能测试的理解误区
44 0
|
10月前
|
监控 关系型数据库 MySQL
学会这些性能测试干货知识点,才好拿捏性能测试
学会这些性能测试干货知识点,才好拿捏性能测试
|
负载均衡 测试技术
性能测试知识科普(二)
在聊测试策略之前,很有必要聊聊性能测试的目的,或者性能测试的本质是要做什么,解决什么问题。只有想明白这点,后面的需求分析、工具选型、制定测试策略才能更好的开展。
性能测试知识科普(二)
|
缓存 测试技术 数据处理
性能测试知识科普(六):三大模型
在性能测试工作中,业务模型、流量模型和数据模型是至关重要且必须在项目中构建的,否则很可能导致测试的场景和实际差距很大,测试结果也无法为性能分析和优化提供足够有说服力的支撑。为了便于大家理解三大模型
性能测试知识科普(六):三大模型
|
缓存 负载均衡 监控
性能测试知识科普(四):分析需求
为了避免某个可用区由于网络硬盘等原因损坏导致服务不可用,跨可用区的服务部署是一种常见的容灾手段。
性能测试知识科普(四):分析需求
|
缓存 监控 测试技术
性能测试知识科普(一)
换成高速收费站的场景,就是车到了收费窗口,我刷卡扫码支付,然后抬杆放行直到车出去下一个车进来。这个过程的耗时就是所谓的响应时间。至于我们常见的平均响应时间和99响应时间,只是不同维度的统计方法而已。
|
数据可视化 测试技术
性能测试知识科普(三)
还有在一些技术交流群,很多同学会说自己遇到的问题,如不知道怎么用jmeter参数化,locust的压测结果图表怎么看,怎么写gatling的压测脚本等等。并不是说觉得用工具low,而是遇到问题,我个人觉得首先应该分析问题,找到解决方法和策略,然后寻找合适的工具来辅助自己快速解决问题。
|
Dubbo Java 测试技术
再谈性能测试之需求调研
之前的文章聊聊性能测试开始前的准备工作,聊了一些关于性能测试开始前要做的准备工作。
|
SQL 架构师 中间件
深聊性能测试,从入门到放弃之:我只做了这几点,公司的架构师也对我刮目相看
深聊性能测试,从入门到放弃之:我只做了这几点,公司的架构师也对我刮目相看
87 0