性能测试新手常犯错误总结(七):你需要调优么

2024-02-01 02:08

本文主要是介绍性能测试新手常犯错误总结(七):你需要调优么,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



    测试人员喜欢在得到某个达不到预期的性能结果后,进行一下“调优”。


  PM有时也会布置任务,测试完成后“调一个优”。


  一些人貌似有了这种观念:调优才使性能测试有意义、性能测试的目的就是调优、做调优才能显出测试人员的水平……


  随着经验的增长和对性能更深入的认识,我越来越体会到调优是一个复杂的过程,不是动动嘴、改俩个参数这么简单,只有通过科学的方法和扎实的技能才能做好,以至于我使用这个词的频率越来越低,因为不敢轻易说出口……


  在你再一次调优之前,先考虑以下几个问题:


  为什么需要调优


  如果问起这个问题,得到的回答通常是“因为性能不够好”,那么接下来我会问性能不好体现在哪里?你要调什么?希望得到什么结果?


  如果你不能足够准确的回答第一个“体现在哪里”的问题,后两个也一定没有答案,所谓的调优自然也无从谈起。而这第一个问题的答案其实也就是定位的过程。


  举一个小例子。如果我已经发现数据库较慢,通过进一步监控又发现了一个cache的spinlock contention这个指标超过了正常的范围。那么我会猜测可能是这块缓存的争用导致了数据库的运行状况变差,针对这个现象我知道可以通过将cache分区来减少争用,改变配置后再重新测试和监控,这就可以算是一次调优的尝试。


  但如果你只停留在数据库慢的这个层面上,又怎么能进行调优呢?


  所以,需要调优的一个前提是“定位到问题”或者“发现了瓶颈”。


  又有人说了,没有问题为什么不能调优?没有问题,我们可以让系统变得更好!


  但是,所谓的“更好”如何衡量?“好”到什么程度时不需要继续“好”了呢?


  请记住,瓶颈永远存在,消灭了一个,就必然会引入另一个。


  调优的目标也不是“没有瓶颈”,而是系统在其所承受的压力下,性能表现足够好,那就够了!


  “足够好”其实也就是没有问题。


  调优调什么


  理解了上面的内容,这个问题的答案就很明显,调优必然是针对具体的问题或瓶颈。


  而问题和瓶颈,指的是“性能不好”这个现象的直接原因,而不是那些不痛不痒的其他因素。


  好比奥拓比奥迪跑得慢,最主要的问题在于发动机(不懂车,随便一说),而不是奥拓车的外型不够流线、轮胎抓地不够好……


  如果把精力放在改善外型、轮胎这些方面上,确实会让奥拓变得更“快”,但是从原问题(比奥迪慢)上来看,这都是没有意义的。


  至于如何准确的定位出问题,针对问题又如何下手,这就是技术能力,只能依靠不断的学习、长期的积累了。


  不过依然存在一些比较科学的工作方法,可以让你尽快的抓住重点。如在系统运行正常时采集一份足够完整的性能指标作为基准,当出现状况时再次采集一份相同的指标,对比其中的差异,从差异处入手。


  经常见到这种人,一听到数据库慢,直接加大内存分配、加缓存、加连接数、加大各种资源配置……典型的胡乱“调优”。


  调优的层次


  同一个问题,可能可以从多个方面进行处理。


  一个慢SQL,优化的方式可能是加个索引、绑定缓存、改写SQL、表分区、甚至是升级硬件。


  资源争用问题,既可以从配置层面进行优化、减小争用发生的机率,又可以从程序的实现方式上做改变、从源头上避免争用。


  假设多种处理方式,都可以满足期望,那么应该从哪个层面下手呢?


  这就需要考虑到工作量、效果、隐患等多种因素,当然也不排除几种优化共同作用。


  调优有效么


  这是一个工作方法是否科学的问题。


  每一次试验,都需要能够验证是否有效。有效的保留,无效的则复原。


  除了对原问题的验证,还必须确认对其他部分是否产生了副作用。理论上这就需要在每一次调优尝试后,进行一次足够全面的复测。


  否则,很容易出现“拆东墙补西墙”的问题。


  记住以下几个要点:


  ● 每次只改变一处。


  ● 每次改变后进行复测。有效的保留,无效的复原。


  ● 不断的迭代,直到达到预期。


  只有真正理解调优的目的,并按照科学的方法行动,你的努力才会体现出价值。


这篇关于性能测试新手常犯错误总结(七):你需要调优么的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/665755

相关文章

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

Python中实现进度条的多种方法总结

《Python中实现进度条的多种方法总结》在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码... 目录一、简单的打印方式二、使用tqdm库三、使用alive-progress库四、使用progres

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO