认清性能问题

简介: 首先专注于业务上最需要优先修正的程序,而不是从全局调优来改善性能。要重视全局的性能表现,但解决问题要从细节和业务最需要的环节入手。

640.jpg


昨晚翻看收藏的一些技术文章,看到了这篇:Thinking Clearly About Performance。


这篇文章对系统性能有很深刻和本质的认识,重温了里面提到的一些观点,有很多新的感悟。


这篇文章,分享里面提到的一些观点,以及我的一些思考总结。


原文地址:http://queue.acm.org/detail.cfm?id=1854041


友情提醒,文末有福利哦!

 

响应时间VS吞吐量


通常来说,响应时间和吞吐量承反比例(响应时间越长吞吐量越低)。


  • 性能优化是需要多维度去衡量和优化的领域;
  • 响应时间和吞吐量并没有直接的关系(但是有间接关系);
  • 一般来说,性能优化的目标是:在尽量保持和降低响应时间的情况下,不断提高吞吐量,提高流量高峰时间的系统服务可用性(大多数情况,而非全部);
  • 响应时间、吞吐量、可用性等因素有时候存在矛盾,需要综合考虑业务情况、系统模块的依赖关系、处理方式(单线程/多线程/负载均衡)等因素,做到合理取舍;


描述响应时间的方式


尽量用百分比的方式而非平均值来描述响应时间(户感知到的是差异变化,而非平均)!


这也是为什么在性能测试中,P90/P99的RT比平均值更受技术人员看重的原因。


性能需求指标


性能需求指标应该是明确描述的、可量化的指标需求。


如果没有明确可量化的技术指标,性能需求就是伪需求。


性能剖析思路


找到最慢的几个任务(消耗时间最多),分析它们是否有对应关系,每个任务的时间占比,得到一个明确的描述:每个任务运行消耗了多少时间!


现在有很多工具可以帮助快速的监控分析,比如jaeger、skywalking。


阿姆达尔定律


系统对某一部件采用更快执行方式所能获得的系统性能提升程度,取决于这种执行方式被使用的频率,或所占总执行时间的比例。


性能优化应该先考虑对性能提升最大(ROI)最高的方式。


性能优化排序


优先占用资源最多或消耗时间最多的任务,但要考虑优化的成本、收益、风险(没有最好的方案,只有最合适的方案)。


性能优化原则


首先专注于业务上最需要优先修正的程序,而不是从全局调优来改善性能。


要重视全局的性能表现,但解决问题要从细节和业务最需要的环节入手。


性能拐点


响应时间和吞吐量之间的某个最优负载平衡点的资源使用率的值,称为拐点。


计算公式:响应时间/资源利用率=所得结果最小的值

   

640.png


在完美扩展性前提下,只要系统的平均负载超过拐点,那么系统依然会面临性能瓶颈,实际生产中的拐点比上图的拐点数值更小。拐点主要有以下几个特点:


  • 系统中的每一项资源都存在拐点;
  • 系统的拐点都≤上图中给出的值,系统的扩展完美型越差,拐点越小;
  • 对于请求随机到达的系统,如果资源负载持续超过拐点,那么将遇到性能瓶颈;


容量规划


  • 如果系统中某项资源超过它的拐点,就会遇到性能瓶颈;
  • 保持资源利用率低于拐点,系统表现则基本不会低于我们的期望值;
  • 遇到容量瓶颈,解决方式是:重新配置负载分配(减少负载OR增加容量);
  • 某项资源的容量就是高峰期可以轻松运行任务而资源使用率不会超过拐点的值;


最后:过早的考虑优化系统性能,是一场灾难!!!

相关文章
|
3月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
1月前
|
UED
别让细节拖累你的产品:学会权衡才是硬道理
在产品管理中,细节优化与整体推进之间的平衡至关重要。本文探讨了“抠细节”的利弊,并提出了确定优先级、设定阈值、数据驱动、强化团队协作、保持开放心态及学会妥协等平衡策略,帮助产品经理在细节与全局之间找到最佳平衡点,实现产品成功。
|
8月前
|
存储 并行计算 算法
【深度挖掘Java性能调优】「底层技术原理体系」深入挖掘和分析如何提升服务的性能以及执行效率(性能三大定律)
【深度挖掘Java性能调优】「底层技术原理体系」深入挖掘和分析如何提升服务的性能以及执行效率(性能三大定律)
97 0
|
5月前
|
缓存 算法 数据库
安卓应用性能优化:一场颠覆平凡的极限挑战,拯救卡顿的惊世之战!
【8月更文挑战第7天】《安卓应用性能优化实战》
63 4
|
8月前
|
搜索推荐 程序员 测试技术
研究思考|关于软件复杂度的困局
本文重点围绕软件复杂度进行剖析,希望能够帮助读者对软件复杂度成因和度量方式有所了解。
|
8月前
|
存储 缓存 前端开发
超越极限,前端性能优化的终极奥义
在当今互联网时代,前端性能优化成为了每个开发者必须面对的挑战。本文将介绍一些独特的、能够极大提升前端性能的技巧和策略。通过深入探索代码压缩、资源加载、渲染优化和缓存策略等方面,我们将揭示出前端性能优化的终极奥义。
|
搜索推荐 程序员 测试技术
研究思考丨关于软件复杂度的困局
研究思考丨关于软件复杂度的困局
1319 10
研究思考丨关于软件复杂度的困局
|
负载均衡 监控 算法
转:启发式算法对网络行为管理系统的应用研究、实用性分析及实现难度
启发式算法在网络行为管理系统中的应用研究是一个重要的领域,它可以帮助改善系统的性能和效率。启发式算法是一种通过模拟自然界的演化过程或启发式规则来解决复杂问题的方法。
90 2
|
程序员 测试技术
人月神话札记:效率
人月神话札记:效率
131 0
|
程序员
优秀程序员是如何突破瓶颈的?
程序员是一群,智商极高,人品善良,思维逻辑缜密,收入挺高,交友不多,生活圈子比较小而且单纯,都是一批可爱的人,但是他们不善言谈,不善交际。到了一定的年龄和级别后,都很难突破自己的瓶颈。
1043 0