做任何事情都要讲究方法策略,性能测试的诊断自然也需要一些常规的方法。就像我们身体不舒服,去医院就诊,大多数医生要依赖化验报告来帮助诊断,性能测试进行诊断时候也需要一些测试报告数据,性能监控的有主机监控,应用的监控,中间件的监控,数据库监控等。
性能优化是为了更好地利用计算机硬件资源,使用更少的硬件资源来提供更好,更多,更优质的服务。
性能诊断是性能优化的前提,性能诊断是一个大课题,不同的架构,不同的应用场景,不同的程序语言,诊断分析的方法大同小异,大致可以分为两类:自底向上和自顶向下。
如下图:
1>自底向上
通过监控硬件(CPU,内存,磁盘,网络等硬件资源)及操作系统的指标来分析性能问题(配置,程序等)。因为用户的请求最终是由计算机硬件设备来完成的。硬件指标反映了资源需求,资源需求导致了性能风险。
2>自顶上下
通过生成负载来观察被测系统性能,例如响应时间,吞吐量,然后从请求为起点,由外及里一层一层地分析,从而找到性能问题所在。
不管是自底向上还是自顶向下,关键点就是生成负载,监控性能指标。与医院里的医生诊断类似,先检查,再开药。一些有丰富经验的医生往往通过患者的外在症状来进行诊断,此时经验就是能力,而且高效;另外一些医生通过验血,测量体温,B超,CT等,进一步检测才能确诊。
有的时候,患者还需要进一步留院观察,多数是因为病情比较复杂,症状和化验结果不能确诊,或者短时间内无法康复,通俗的说还是没有把握,只能进行医疗尝试,这就类似我们分析一些复杂的性能问题,对一些怀疑的部分进行实验性修改,看看是否提高性能,一一排除可疑之处。
随着技术不断迭代,数据在变化,技术也在变化,为了更好的服务用户,系统的框架也在变化。
早期的应用,我们将系统功能集中到一个系统中,使用一个程序包发布,如下图。
后来随着功能的增多,开发复杂度变高,我们开始分前后端开发,开始把大系统拆分为若干个小系统,然后采用负载均衡的方式来增强处理能力,如下图。
如今海量的用户情况下,为了提高性能,方便工程化,增加可靠性,我们把系统拆分的更细,也就是近几年比较流行的微服务,虽然架构在变,但本质不变,不管你用什么结构,最终还是有计算机硬件来处理业务请求,对于导致性能问题的程序的分析还要拆分到单机,在单机上分析软硬件资源的使用情况,如下图所示:
性能测试的关注点
响应时间:衡量系统对用户请求的反应速度,通常以秒为单位。
吞吐量:系统在给定时间内处理的工作量,可以是每秒请求数、事务数或其它业务量度。
并发用户数:系统能同时支持的最大在线用户数量。
资源利用率:CPU、内存、磁盘I/O、网络带宽等硬件资源的使用情况。
稳定性:长时间运行下系统的稳定性和可靠性。
可扩展性:系统在增加硬件资源或优化后能否线性提升性能。
对于性能问题的诊断,以下是一些常见的思路和步骤
分析需求
确认性能目标,例如最大并发用户数、平均响应时间等。
了解系统的预期用户行为模式,如访问高峰时段、典型用户路径等。
设计测试场景
创建模拟真实用户行为的测试脚本。
规划不同级别的负载测试,包括常规负载、峰值负载和破坏性负载测试。
执行测试
使用性能测试工具执行预先设计的测试用例。
监控并记录系统的关键性能指标(KPI)。
数据收集与分析
收集服务器端、客户端以及网络上的性能数据。
对比实际结果与预定的性能目标,识别瓶颈。
诊断与优化
定位性能瓶颈所在,可能涉及代码层面、数据库查询效率、网络配置等方面。
根据分析结果调整系统参数或重构应用逻辑,以提高性能。
重复上述步骤,直到达到满意的性能水平。
报告与文档化
撰写详细的性能测试报告,包括测试环境描述、测试方法、发现的问题及改进建议。
文档化所有相关的性能调优措施和最佳实践。
阅读后若有收获,不吝关注,分享,在看等操作!!!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。