最近一直纠结性能分析与调优如何下手,先从硬件开始,仍是先从代码或数据库。从操做系统(CPU调度,内存管理,进程调度,磁盘I/O)、网络、协议(HTTP, TCP/IP ),仍是从应用程序代码,数据库调优,中间件配置等方面入手。
单一个中间件又分web中间件(apache 、IIS),应用中间件(tomcat 、weblogic 、webSphere )等,虽然都是中间件,每同样拎出来往深了学都不是一朝一夕之功。但调优对于每一项的要求又不只仅是“知道”或“会使用”这么简单。起码要达到“如何更好的使用”。
常看到性能测试书中说,性能测试不仅仅是性能测试工程师一我的的事儿。须要DBA 、开发人员、运维人员的配合完成。可是在很多状况下性能测试是由性能测试人员独立完成的,退一步就算由其它人员的协助,了解系统架构的的各个模块对于自身的提升也有很大帮助,同进也更能获得别人的尊重。
再说性能调优以前,咱们有必要再提一下进行测试的目的,或者咱们进行性能测试的初衷是什么?
能力验证:验证某系统在必定条件具备什么样的能力。
能力规划:如何使系统达到咱们要求的性能能力。
应用程序诊断:好比内存泄漏,经过功能测试很难发现,但经过性能测试却很容易发现。
性能调优:知足用户需求,进一步进行系统分析找出瓶颈,优化瓶颈,提升系统总体性能。
通常系统的瓶颈
性能测试调优须要先发现瓶颈,那么系统通常会存在哪些瓶颈:
硬件上的性能瓶颈:
通常指的是CPU、内存、磁盘I/O 方面的问题,分为服务器硬件瓶颈、网络瓶颈(对局域网能够不考虑)、服务器操做系统瓶颈(参数配置)、中间件瓶颈(参数配置、数据库、web服务器等)、应用瓶颈(SQL 语句、数据库设计、业务逻辑、算法等)。
应用软件上的性能瓶颈:
通常指的是应用服务器、web 服务器等应用软件,还包括数据库系统。
例如:中间件weblogic 平台上配置的JDBC链接池的参数设置不合理,形成的瓶颈。
应用程序上的性能瓶颈:
通常指的是开发人员新开发出来的应用程序。
例如,程序架构规划不合理,程序自己设计有问题(串行处理、请求的处理线程不够),形成系统在大量用户方位时性能低下而形成的瓶颈。
操做系统上的性能瓶颈:
通常指的是windows、UNIX、Linux等操做系统。
例如,在进行性能测试,出现物理内存不足时,虚拟内存设置也不合理,虚拟内存的交换效率就会大大下降,从而致使行为的响应时间大大增长,这时认为操做系统上出现性能瓶颈。
网络设备上的性能瓶颈:
通常指的是防火墙、动态负载均衡器、交换机等设备。
例如,在动态负载均衡器上设置了动态分发负载的机制,当发现某个应用服务器上的硬件资源已经到达极限时,动态负载均衡器将后续的交易请求发送到其余负载较轻的应用服务器上。在测试时发现,动态负载均衡器没有起到相应的做用,这时能够认为网络瓶颈。
性能测试出现的缘由及其定位十分复杂,这里只是简单介绍常见的几种瓶颈类型和特征,而性能测试所须要作的就是根据各类状况因素综合考虑,而后协助开发人员\DBA\运维人员一块儿定位性能瓶颈。
通常性能调优步骤
通常性能问题调优的步骤:
步骤一:肯定问题
应用程序代码:在一般状况下,不少程序的性能问题都是写出来的,所以对于发现瓶颈的模块,应该首先检查一下代码。
数据库配置:常常引发整个系统运行缓慢,一些诸如oracle 的大型数据库都是须要DBA进行正确的参数调整才能投产的。
操做系统配置:不合理就可能引发系统瓶颈。
硬件设置:硬盘速度、内存大小等都是容易引发瓶颈的缘由,所以这些都是分析的重点。
网络:网络负载太重致使网络冲突和网络延迟。
步骤二:肯定问题
当肯定了问题以后,咱们要明确这个问题影响的是响应时间吞吐量,仍是其余问题?是多数用户仍是少数用户遇到了问题?若是是少数用户,这几个用户与其它用户的操做有什么不用?系统资源监控的结果是否正常?CPU的使用是否到达极限?I/O 状况如何?问题是否集中在某一类模块中? 是客户端仍是服务器出现问题? 系统硬件配置是否够用?实际负载是否超过了系统的负载能力? 是否未对系统进行优化?
经过这些分析及一些与系统相关的问题,能够对系统瓶颈有更深刻的了解,进而分析出真正的缘由。
步骤三: 肯定调整目标和解决方案
得高系统吞吐理,缩短响应时间,更好地支持并发。
步骤四:测试解决方案
对经过解决方案调优后的系统进行基准测试。(基准测试是指经过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试)
步骤五:分析调优结果
系统调优是否达到或者超出了预约目标?系统是总体性能获得了改善,仍是以系统某部分性能来解决其余问题。调优是否能够结束了。
最后,若是达到了预期目标,调优工做就基本能够结束了。
下面算是一个技巧,如面试官问到一个性能问题假设,我不知道性能问题出在哪儿时,能够按照这个思路回答^_^
? 查找瓶颈时按如下顺序,由易到难。
服务器硬件瓶颈---〉网络瓶颈(对局域网,能够不考虑)---〉服务器操做系统瓶颈(参数配置)---〉中间件瓶颈(参数配置,数据库,web服务器等)---〉应用瓶颈(SQL语句、数据库设计、业务逻辑、算法等)
注:以上过程并非每一个分析中都须要的,要根据测试目的和要求来肯定分析的深度。对一些要求低的,咱们分析到应用系统在未来大的负载压力(并发用户数、数据量)下,系统的硬件瓶颈在哪儿就够了。
? 分段排除法 颇有效
性能测试调优应该注意的要点:
要点1: 在应用系统的设计开发过程当中,应始终把性能放在考虑的范围内。
要点2: 肯定清晰明确的性能目标是关键。
要点3: 必须保证调优后的程序运行正确。
要点4: 系统的性能更大程度上取决于良好的设计,调优技巧只是一个辅助手段。
要点5: 调优过程是迭代渐进的过程,每一次调优的结果都要反馈到后续的代码开发中去。
要点6: 性能调优不能以牺牲代码的可读性和可维护性为代码。web