【转载】软件性能测试分析与调优实践之路-性能分析调优思
想与调优技术总结
本⽂主要阐述软件性能测试中的⼀些调优思想和技术,节选⾃作者新书《软件性能测试分析与调优实践之路》部分章节归纳。
⼀、性能分析与调优思想
1、性能分析调优模型
性能测试除了为获取性能指标外,更多是为了发现性能瓶颈和性能问题,然后对性能问题和瓶颈进⾏分析和调优,在当今互联⽹⾼速发展的时代,性能调优的模型可以归纳总结如下图所⽰。
系统模型中相关的组件描述如下表所⽰
组件描述
⽹络分发⽹络分发是⾼速发展的互联⽹时代常⽤的降低⽹络拥塞,快速响应⽤户请求的⼀种技术⼿段,最常⽤的⽹络分发就是
nginx和apache区别CDN(Content Delivery Network,即内容分发⽹络),依靠部署在世界各地的边缘服务器,通过中⼼平台的负载均衡、源服务器内容分发、调度等功能模块,使世界各地⽤户就近获取所需内容,⽽不⽤每次都到中⼼平台的源服务器获取响应结果,⽐如南京的⽤户直接访问部署在南京的边缘服务器,⽽不需要访问部署在遥远的北⽅的北京的服务器
Web
服务器
Web服务器⽤于部署Web服务,Web服务器的作⽤就是负责请求的响应和分发以及静态资源的处理
Web
服务
Web服务指运⾏在Web服务器上的服务程序,最常见的Web服务就是Nginx和Apache
Web
Cache
Web Cache指Web层的缓存,⼀般都是临时缓存HTML、CSS、图像等静态资源⽂件
应⽤服
务器
应⽤服务器⽤于部署应⽤程序,如Tomcat、WildFly、普通的Java应⽤程序(如jar包服务),IIS等
应⽤程
序服务
应⽤程序服务指运⾏在应⽤服务器上的程序,⽐如Java应⽤,C/C++应⽤、Python应⽤,⼀般⽤于处理⽤户的动态请求
应⽤缓存应⽤缓存指应⽤程序层的缓存服务,常⽤的应⽤缓存技术有Redis、Memcached等,这些技术⼿段也是动态扩展的⾼并发分布式应⽤架构中经常使⽤的技术⼿段
数据库(DB)⽤于数据的存储,可以包括关系型数据库以及NoSql数据库(⾮关系型数据库),常见的关系型数据库有Mysql、Oracle、Sqlserver、DB2等,常见的NoSql数据库有Hbase、MongoDB、ElasticSearch等
外部系
指当前系统依赖于其他的外部系统,需要从其他的外部系统中通过⼆次请求获取数据,外部系统有时候可能会存在很多个
上图中的系统模型是⼀个互联⽹中常见的⽤户请求的分层转发和处理的过程,在性能调优时就是不断采集系统中的性能指标以及系统模型中各层的资源消耗,从中发现性能瓶颈和性能问题,然后对瓶颈和问题进⾏分析诊断来确定性能调优⽅案,最后通过性能压测进⾏验证调优⽅案是否有效,如果⽆效继续重复这个过程进⾏性能分析,直到调优⽅案有效,瓶颈和问题得到解决。这个过程⼀般是⾮常漫长,因为很多时候性能调优⽅案往往不是⼀次就能有效或者⼀次就能解决所有的瓶颈和问题,或者解决了当前的瓶颈和问题,但是继续性能压测⼜可能会出现新的瓶颈和问题。
2、性能分析与调优思想
2.1、分层分析
分层分析指的就是按照系统模型以及系统架构分层按照调⽤链进⾏监控分析和问题排查,如下图所⽰。
分层排查⼀般需要对系统的应⽤架构层次以及部署架构⾮常的熟悉,需要熟悉请求的处理链过程。
分层排查⼀般需要对每⼀层建⽴checklist,然后按照每层的checklist逐⼀进⾏分析。
分层排排查效率较低,但是往往能发现更多的性能问题。
分层排查可以⾃上⽽下也可以⾃下⽽上。
2.2、科学论证
科学论证⼀般包括发现问题、问题假设、预测、试验论证、分析这5个步骤,如下图所⽰。
发现问题:指通过性能采集和监控,发现了性能瓶颈或者性能问题,⽐如并发⽤户数增⼤后TPS并不增加、每台应⽤服务器的CPU消耗相差特别⼤等。
问题假设:指根据⾃⼰的经验判断,假设是某个因素导致了出现瓶颈和问题。
预测:指根据问题假设,预测可能出现的⼀些现象或者特征。
试验论证:根据预测,去检查预期可能出现的现象或者特征
分析:根据获取到的实际现象或者特征进⾏分析,判断假设是否正确,如果不正确,就重新按照这个流程进⾏分析论证。
科学论证法进⾏性能分析与调优的⽰例如下图所⽰。
2.3、问题追溯与归纳总结
(1)、问题追溯分析指的是根据问题去追溯最近系统或者环境发⽣的变化,⼀般适⽤于⽣产已上线系统的版本发布或者环境变动导致的性能问题,问题追溯的步骤⼀般如下图所⽰,问题追溯分析是通过在追溯和描述中去逐步排查可能导致问题的原因。
(2)、归纳总结指的根据经验的总结,在出现某种性能瓶颈或者性能问题时根据以往总结的原因进⾏逐⼀排查。
⼆、性能调优技术
1、缓存调优
互联⽹⾼速发展的这个时代,缓存使⽤已经成为了很多⼤型系统或者电商⽹站使⽤的⼀个关键技术,合理的设计缓存直接关系到了⼀个系统或者⽹站的并发访问能⼒和⽤户体验。⽹站按照存放地点的不同可以分为⽤户端缓存和服务端缓存,如下图所⽰。
缓存调优的关键点说明如下:
如何让缓存的命中率更⾼?
如何注意防⽌缓存穿透?
如何控制好缓存的失效时间?
如何做好缓存的监控分析?⽐如slow log分析、连接数监控、内存使⽤监控。
如何防⽌缓存雪崩?缓存雪崩指的是服务器在出现断电等极端异常情况后,缓存中的数据全部丢失,导致⼤量的请求全部需要从数据库中直接获取数据从⽽数据库压⼒过⼤造成数据库崩溃,防⽌缓存雪崩需要注意:
(1)      要处理好缓存数据全部丢失后,如何能快速把数据重新加载到缓存中。
(2)      缓存数据的分布式冗余备份,当出现数据丢失时,可以迅速切换使⽤备份数据。
2、同步转异步推送
同步:指的是系统收到⼀个请求后,在该请求没有处理完成时,就⼀直不返回响应结果,直到处理完成了才返回响应结果,如下图所⽰。
异步:与同步相⽐,异步指的是系统收到⼀个请求后,只⽴即返回请求调⽤⽅请求接收成功,在请求处理完成后,再异步推送处理结果给调⽤⽅,或者请求调⽤⽅在间隔⼀定时间再重新来获取请求结果。如下图所⽰。
同步转异步主要是解决同步请求时的阻塞等待,⼀直处于阻塞等待的请求,往往会造成连接不能快速释放,从⽽导致⾼并发处理时,连接数不够⽤,通过队列异步接收请求后,请求处理⽅再进⾏分布式的并⾏处理,从⽽达到处理能⼒扩展,并且⽹络连接也可以快速释放。
3、拆分
拆分指的是将系统中的复杂的业务调⽤拆分为多个简单的调⽤,如下图所⽰,⼀般遵循的原则如下:
对于⾼并发的业务请求调⽤都单独拆分为单个的⼦系统应⽤。
对于并发访问量接近的业务,可以按照产品业务进⾏拆分,相同的产品业务都归类到⼀个新的⼦系统中。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。