认清性能问题

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

640.jpg


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


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


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


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


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

 

响应时间VS吞吐量


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


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


描述响应时间的方式


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


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


性能需求指标


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


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


性能剖析思路


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


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


阿姆达尔定律


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


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


性能优化排序


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


性能优化原则


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


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


性能拐点


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


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

   

640.png


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


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


容量规划


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


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

目录
打赏
0
0
0
0
196
分享
相关文章
从MySQL优化到脑力健康:技术人与效率的双重提升
聊到效率这个事,大家应该都挺有感触的吧。 不管是技术优化还是个人状态调整,怎么能更快、更省力地完成事情,都是我们每天要琢磨的事。
71 23
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
高并发下的生存之道:如何巧妙化解热Key危机?
本文详细探讨了互联网高并发场景下的热Key问题及其解决方案。热Key即因频繁访问导致缓存压力激增,影响系统稳定性。作者小米介绍了多种应对策略,包括Redis集群、主从复制、本地缓存、限流及Key加随机值等技术手段,旨在帮助读者有效分散负载,确保服务稳定。此外,还提供了兜底逻辑如降级处理和预热机制,以应对突发流量。希望本文能帮助大家更好地理解和解决热Key问题。
109 1
高并发下的生存之道:如何巧妙化解热Key危机?
超越极限,前端性能优化的终极奥义
在当今互联网时代,前端性能优化成为了每个开发者必须面对的挑战。本文将介绍一些独特的、能够极大提升前端性能的技巧和策略。通过深入探索代码压缩、资源加载、渲染优化和缓存策略等方面,我们将揭示出前端性能优化的终极奥义。
要学的东西太多,自己能力不足,很焦虑怎么办
总有人问我,兔哥,现在java要学的知识点这么多,记不住,怕学不精很焦虑怎么办? 这是很多初学者都有的痛点。 其实吧,你可以试试贪多而不必嚼烂。
207 0
Fastjon2他来了,性能显著提升,还能再战十年
阿里官方给的定义是,FASTJSON是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
612 1
当今面试最高频的10道算法题,拿捏
当今,大厂面试必回的十道题,拿捏
671 0
性能基础之速读【性能之巅:洞悉系统、企业与云计算】
综合来讲,这是一本介绍方法论的书,作者通过概念、模型、观测、实验手段来进行问题的剖析。另外本书的涉及范围之广,从内存、CPU、文件系统、存储硬件、网络等各个方面。并且本书通常以一个实例入手,深入的介绍系统原理,特别是在一些重点细节上,往往有超出一般的认识和方法。
955 1
性能基础之速读【性能之巅:洞悉系统、企业与云计算】
优秀程序员是如何突破瓶颈的?
程序员是一群,智商极高,人品善良,思维逻辑缜密,收入挺高,交友不多,生活圈子比较小而且单纯,都是一批可爱的人,但是他们不善言谈,不善交际。到了一定的年龄和级别后,都很难突破自己的瓶颈。
1059 0