性能调优之我见

谈到软件产品的性能调优,我认为可以从狭义和广义两个范围来理解。从狭义的范畴来看,性能调优主要是指通过修改软件程序逻辑、结构等技术手段提升软件产品的各项性能指标,如响应时间等等;而从广义的层面来看,就不仅限于程序内部了,因为造成系统性能问题的瓶颈很可能来源于方方面面,而这种情况往往是性能调优很普遍的情况,下面就从广义的范围细分成几个角度来进行阐述。

  一、软件层面

  a)首先要谈到的肯定是我们自己提供的软件产品,因为它的内部设计是我们最清楚的,用户在应用时遇到性能问题首先要质疑的也是我们的产品,因此这个层面的调优肯定是我们软件供应者的重中之重!举例来说:比较复杂的业务,通常会在程序中输出一些关键操作的执行时间,然后再分析哪些操作比较耗时,之后再找原因。具体分析原因就比较多了,比如多次循环查询数据库,复杂耗时的SQL语句,频繁的远程调用,复杂算法,等等。

  b)数据库层面:设计数据库时应考虑到在少访问和简化、优化访问的前提下实现产品功能,多用存储过程代替完整SQL,尽量用连接池使用户和服务的连接实现可复用,尽量不使用游标结构等,对基本表的设计进行优化如第三范式、引入“中间表”的技术思路,控制用户实际数据量的增长;对数据库进行索引优化,避免整表扫描;对数据库的事务处理进行调优(去除不必要的锁、将事务切分成小的粒度、适当降低隔离级别、减少访问热点等);SQL语句调优(尽量优化那些无意义的、拙劣的、复杂的SQL)等等。这方面主要就是本着一个通过尽可能少的磁盘访问而获得所需要的数据这么一个基本原则。

  c)中间件软件:某些软件产品为数据库、中间件、客户端的三层架构设计,此时为系统运行提供服务的中间件软件也将成为制约性能的一个瓶颈。因此在这个层面上也是有很大调优空间的,比如各种相关参数的设置优化,使用性能包、性能监控分析工具等,避免竞争线程资源,批处理,堆大小的设置,为溢出条件设置执行队列,后备缓冲,减少非重要应用的资源占用,使用集群等。举个简单的实例,我曾经遇到一个产品的性能问题,当查询数据大到一定程度时,系统一直灰屏死机状态,结果只是通过把JVM内存参数设置从默认值的128调为256就轻松解决了,只是参数值的一个小变动,反映到具体的用户面前就是出的来和出不来数据的本质差别!

  d)操作系统:无论是服务器还是用户终端,都脱离不了操作系统这个基础的应用平台的支持,因此这个层面的性能调优工作也千万不能遗漏。例如同厂商的不同版本(如WINDOWS各系列)、不同厂商(MS/HP/SUN等)不同的操作系统(WINDOWS/LINUX/UNIX等),这些操作系统的性能表现本身就有所差异,如内存的分配、虚拟内存的处理、数据的读写交换、兼容稳定抗压性等等方面,利用相应的调优方法和工具,可以对此环节进行优化。

  二、硬件层面

  a)CPU:中央处理器,决定数据处理速度的核心部件,与性能表现的相关度可想而知,硬件方面具体调优方法及工具本文中不再赘述,下同!

  b)内存、缓存:数据交换的临时存储空间,它的大小形象的说就像是火车站候车室的面积,与性能的关系可想而知。比如有些程序设计的操作对内存回收设计有漏洞,导致频繁操作时内存泄漏越来越多,系统就会越来越慢。

  c)硬盘、I/O:数据存储、调用的载体,如果存储器像候车室,那这些就像是车箱的大小与节数等。

  d)网络:如果还是用坐火车为例,网络的差别就像是普通、快速、动车、磁浮等各种等级的差别,如果一个“系统”频繁需要通过火运完成,那它的性能表现和网络的相关性就不言而喻了。比如某些软件功能设计时没有考虑网络流量方面的风险,导致每次操作时网络连接次数很多,频繁调用或是数据包过大,这些都会导致在一定网络条件下产生性能问题。

  e)显卡等特殊硬件:不同软件产品应用的业务可能用到不同的专用硬件或外设,比如一个很炫的游戏对显卡的要求就会很高,当显示成为短板时死机、跳帧等异常;一个收款台的扫描、信用卡POS机如果质量或兼容性、稳定性不佳时,也可能会造成性能表现的不理想,等待诸如此类问题。

  三、业务层面

  a)业务流程重组:项目甲方在购买软件产品或系统服务前,一般会找相关专家、售前人员作一些相关的评估或“体检”,找出现有运作模式下的一些存在优化空间的错误环节或繁冗流程、制度体系等。因此在这个阶段是否对项目应用方作了足够的优化,也对未来产品上线后的应用性能表现在宏观上起着决定作用。取例来说:如果一个系统设计前没有作过这方面的优化,最后应用时需要100人操作10个步骤才能完成,通过流程重组后,从业务上只需要40个人干5个步骤就搞定了,那么没上软件前我们就能从理论上把性能表现优化80%!

  b)需求定位:与上一条阐述的类似,只是介入的阶段和角色有所区别。需求人员有时是从项目乙方发起的,主动地、有策略性的去选择一些有代表性的单位去调研软件产品的概要或详细需求,为后续的产品开发设计提供依据。在这一阶段是否有效的考虑了未来产品的性能表现,对其提出相关的设计目标,也对后续的性能表现有一定的影响。

  c)实施方案:一般当大型一些的项目合同签订完毕后,就会分期安排实施人员负现场牵头并组织双方成立实施小组团队,共同制订系统的上线、操作培训、应用方案等,并执行方案直至系统正常上线运行,项目交付。因此,这个方案制定的是否精简、高效,也直接关系了用户应用系统的性能表现。

 四、意识层面

  当今社会万事讲求以人为本,如果从软件应用系统涉及的各级人员角色的内心没有把性能表现当回事,那么一切调优最多也都是亡羊补牢而已。比如:

  a)产品经理:项目乙方产品总负责人,产品目标、市场定位、基本框架的制定者。

  b)一线人员:售前咨询、实施顾问等。

  c)需求设计:对产品具体功能设计提出明确要求的角色。

  d)代码实现:按需求定义进行产品的具体实现的角色。

  e)测试人员:对产品质量进行检测、对开发过程进行监管的角色。

  f)最终用户:系统最终的使用者、应用效果的影响者。

  对于一个软件产品来讲,只有以上这些环节的角色人等在各自的工作岗位上,真正的在意识层面上提高优化系统性能的地位,而不是把它作为功能优先实现之外的附属品,才能把系统性能优化的工作最大程度的作在前面、作的全面、作得到位!

  综上所述,我们看到了各类导致性能瓶颈的可能原因(也可以说是性能调优的入手点),下面我们用一个比较常用的鱼骨图分析法来展示一下,可能会更为清晰:

  然后我们再把这些原因按一定的规则进行分门别类,一般采用如下的二维矩阵分析的方法,按可推行的难易度和收效的影响度高低来形成四个象限,把这些问题按具体情况分布在这四个象限中,看到这些问题中哪些是我们要优先解决的,哪些是可以暂时放一放的,调优时可以借鉴这个顺序来进行。

  当然在不同的企业这四个象限中的原因分布是会相互转化的,比如在一个预算有限的私企中可能额外的硬件投资对其来说就是应该放入暂时搁置的象限,而对于财大气粗的单位中可能费用预算不是问题但是想改变他的办事流程和组织架构将是非常困难的,这时解决的优先次序也就要相应调整了。

本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-08-03 00:19:16

性能调优之我见的相关文章

性能调优攻略

关于性能优化这是一个比较大的话题,在<由12306.cn谈谈网站性能技术>中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法.本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充. 在开始这篇文章之前,大家可以移步去看一下以前发表的<代码优化概要>,这篇文章基本上告诉你--要进行优化,先得找到性能瓶颈!但是在讲如何定位系统性能瓶劲之前,请让我讲一下系统性能的定义和测试,因为没有这两件事,后面的定

oracle数据库性能调优技术:深入理解单表执行计划

一.概述 这篇文章是数据库性能调优技术的第二篇.上一篇讲解的索引调优是数据库性能调优技术的基础.这篇讲解的深入理解单表执行计划,是数据库性能调优的有力工具. 查询语句可以有多种可选执行计划,如何选择效率最高的执行计划?达梦数据库.oracle数据库.sql server数据库都是采用基于成本的查询优化,对备选执行计划进行打分,选择大家最小的执行计划进行执行.这些内容,我会在后续的几篇文章中进行详细的描述.在此之前,我们首先需要掌握如何理解数据库执行计划.这篇文章讲解只涉及单表操作的执行计划. 达

Liferay前端性能调优(1) 测评工具YSlow

最近我们团队要问Liferay做前端页面调优,当然了,测评工具是最重要的,为了看具体的页面加载时间等 ,我们首选当然是Chrome浏览器的诊断工具,但是总感觉不专业,基于我已有的经验,我还是推荐了YSlow,它 会对于页面的各项指标进行打分,然后最终获得总分然后评级,一般级别有A,B,C,D,E,F6个级别. 如何安 装和测试YSlow: (1) 从Firefox的Add-on上下载 "YSlow" (2)重启Firefox检查是否YSlow 已经被正确的安装 (3)到我们要测试的页面

数据库性能调优技术

一.概述 随着数据库在各个领域的使用不断增长,越来越多的应用提出了高性能的要求.数据库性能调优是知识密集型的学科,需要综合考虑各种复杂的因素:数据库缓冲区的大小.索引的创建.语句改写等等.总之,数据库性能调优的目的在于使系统运行得更快. 调优需要有广泛的知识,这使得它既简单又复杂. 说调优简单,是因为调优者不必纠缠于复杂的公式和规则.许多学术界和业界的研究者都在尝试将调优和查询处理建立在数学基础之上. 称调优复杂,是因为如果要完全理解常识所依赖的原理,还需要对应用.数据库管理系统.操作系统以及硬

可预见的Oracle应用程序的性能调优

这篇技巧性文章是由"国际Oracle用户组"(IOUG)提供的,它是一个由用户组成的组织,这个组织通过提供高质量的信息.培训.网络和支持,来提高Oracle数据库专家和数据库开发者的水平.这篇文章摘自由David Welch所写的论文<可预见的Oracle应用程序性能调优>.点击这里成为"国际Oracle用户组"的一员,从而获得成千上万的由Oracle用户写的技巧性文章和科技文献. 引言 我们见到过很多带有巨大性能问题的Oracle应用程序和电子商务套件

oracle数据库性能调优技术:索引调优

一.概述 随着数据库在各个领域的使用不断增长,越来越多的应用提出了高性能的要求.数据库性能调优是知识密集型的学科,需要综合考虑各种复杂的因素:数据库缓冲区的大小.索引的创建.语句改写等等.总之,数据库性能调优的目的在于使系统运行得更快. 调优需要有广泛的知识,这使得它既简单又复杂. 说调优简单,是因为调优者不必纠缠于复杂的公式和规则.许多学术界和业界的研究者都在尝试将调优和查询处理建立在数学基础之上. 称调优复杂,是因为如果要完全理解常识所依赖的原理,还需要对应用.数据库管理系统.操作系统以及硬

oracle数据库性能调优技术:深入理解嵌套循环执行计划

一.概述 这篇文章是数据库性能调优技术的第三篇.上一篇文章讲解了深入了解单表执行计划,单表执行计划是理解多表执行计划的基础. 两张表的连接有三种执行方式:1)嵌套循环连接:2)散列连接:3)归并连接.两张表连接时选择这三种中的哪一种呢?这取决于索引.以及连接的代价.在该系列的第三篇(本文)文章中讲解嵌套循环连接,第四篇文章中讲解散列连接,第五篇文章中讲解归并连接.在第六篇以后会分析IN子查询以及EXISTS子查询. 达梦数据库.oracle数据库.sql server数据库在数据库执行计划方面并

oracle数据库性能调优技术:深入理解散列连接执行计划

一.概述 这篇文章是数据库性能调优技术系列的第四篇.上一篇文章讲解了深入理解嵌套循环连接执行计划. 上一篇文章中提到两张表的连接有三种执行方式:1)嵌套循环连接:2)散列连接:3)归并连接.散列连接是很重要的连接方式,包含比较多的内容,这篇文章中讲解为什么需要散列连接?如何理解散列连接? 和前三篇文章一样,本文讲解的是些比较抽象的内容,不拘泥于具体的数据.所以本文中使用的代价评估模型也是抽象的,假设了数据库缓冲区大小只有一个页,新页的读取必然导致旧页的释放.读完本文之后应该能够读懂达梦数据库.o

Java EE应用程序在Glassfish上的性能调优案例分析

Java EE应用的性能问题对严肃的项目和产品来说是一个非常重要的问题.特别是企业级的应用,并发用户多,数据传输量大,业务逻辑复杂,占用系统资源多,因此性能问题在企业级应用变得至关重要,它和系统的稳定性有着直接的联系.更加重要的是,性能好的应用在完成相同任务的条件下,能够占用更少的资源,获得更好的用户体验,换句话说,就是能够节省费用和消耗,获得更高的利润. 要获得更好的性能,就需要对原来的系统进行性能调优.对运行在Glassfish上的JavaEE应用,调优是一件相对复杂的事情.在调优以前必须要