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

2024-02-01 02:08

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



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


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


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


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


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


  为什么需要调优


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


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


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


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


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


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


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


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


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


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


  调优调什么


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


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


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


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


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


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


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


  调优的层次


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


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


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


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


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


  调优有效么


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


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


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


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


  记住以下几个要点:


  ● 每次只改变一处。


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


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


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


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



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

相关文章

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用Python实现一个简易计算器的新手指南

《使用Python实现一个简易计算器的新手指南》计算器是编程入门的经典项目,它涵盖了变量、输入输出、条件判断等核心编程概念,通过这个小项目,可以快速掌握Python的基础语法,并为后续更复杂的项目打下... 目录准备工作基础概念解析分步实现计算器第一步:获取用户输入第二步:实现基本运算第三步:显示计算结果进

基于Python实现温度单位转换器(新手版)

《基于Python实现温度单位转换器(新手版)》这篇文章主要为大家详细介绍了如何基于Python实现温度单位转换器,主要是将摄氏温度(C)和华氏温度(F)相互转换,下面小编就来和大家简单介绍一下吧... 目录为什么选择温度转换器作为第一个项目项目概述所需基础知识实现步骤详解1. 温度转换公式2. 用户输入处

Java慢查询排查与性能调优完整实战指南

《Java慢查询排查与性能调优完整实战指南》Java调优是一个广泛的话题,它涵盖了代码优化、内存管理、并发处理等多个方面,:本文主要介绍Java慢查询排查与性能调优的相关资料,文中通过代码介绍的非... 目录1. 事故全景:从告警到定位1.1 事故时间线1.2 关键指标异常1.3 排查工具链2. 深度剖析:

深入解析Java NIO在高并发场景下的性能优化实践指南

《深入解析JavaNIO在高并发场景下的性能优化实践指南》随着互联网业务不断演进,对高并发、低延时网络服务的需求日益增长,本文将深入解析JavaNIO在高并发场景下的性能优化方法,希望对大家有所帮助... 目录简介一、技术背景与应用场景二、核心原理深入分析2.1 Selector多路复用2.2 Buffer

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指