性能优化“三要”原则
极客时间编辑部
讲述:丁婵大小:7.36M时长:05:21
你好,欢迎收听极客视点。
在实际的性能优化中,需要考虑的因素很多,也经常需要在多个角度和目标间做一些平衡和取舍。为了帮助你把握这些,Facebook 性能优化和容量管理高级专家庄振运在他的《性能工程高手课》中总结出了六条原则,并把它们概括为:“三要,三不要”,以下是性能优化的“三要”原则。
1. 要优先查最大的性能瓶颈
任何一个应用程序或者系统,总会有很多地方可以优化。
可是你知道要从何处下手吗?
其实你可以参考古人的观点,唐代的诗人杜甫说过:“射人先射马,擒贼先擒王”。会打仗的将军,一定会从“最值得打的地方”开始,性能优化工作也是如此。
我们永远都要优先从最大的性能瓶颈入手。
一般来讲,如果找到最大的性能瓶颈,并且解决了它,那这个系统的性能会得到最大的提升(参见第 4 讲帕累托法则)。反之,如果不解决最大的性能瓶颈,反而退而求其次,去解决了其他的性能问题,整个系统的性能或许会更高一些,但是提升的程度往往是非常有限的。
比如,一个应用程序的最大性能瓶颈是 CPU 的使用率太高;而其他种类型的资源,比如网络和存储,都很有富余。这种情况下,如果你去优化网络和存储方面,显然是不能大幅度地提升整体性能的。
不过这里有个稍微特殊的情况,就是内存。因为内存的分配和回收也会消耗一些 CPU 资源,如果这时去优化内存使用,很多时候,的确会帮助你降低 CPU 使用率,不过降低的幅度一定是很有限的。
归根结底,要降低 CPU 的使用率,最有效的方法是做性能分析和剖析,找出程序中使用 CPU 最多的地方,然后对症下药地做优化。
2. 要确诊性能问题的根因
所以,当我们确定了最大的性能瓶颈后,就需要对这一性能瓶颈做彻底的性能分析,找出资源不够使用的原因,也就是考察使用资源的地方。
一种资源被使用的地方往往有好几个,我们需要一个一个地去分析考虑。只有彻底分析了各种使用的情况,才能进一步找出最主要的,也是最可能优化的原因,对症下药。
有些资源使用的原因也许是完全合理的。对这些合理的使用,有些或许已经仔细优化过了,很难再做优化。而另外一些则有可能继续优化。对资源的不合理使用,我们就要尽量想办法去掉。
对于需要优化的地方,我们就需要进一步考虑优化工作的投入产出比例,就是既考虑成本,也考虑带来的好处。因为有些情况下,虽然你可以去优化,但获得的收益并不大,所以不值得去做。
另外要提醒你的是,确诊性能问题的原因有时候非常困难,需要做多方面的性能测试、假设分析并验证。
比如 CPU 的使用,有操作系统的原因,有应用程序的原因,但也有些 CPU 的问题,是在非常边缘的场景下才发生的。为了暴露问题,我们经常需要创造特殊的场景来重现遇到的性能问题。
3. 要考虑各种情况下的性能
性能问题确诊原因后,我们就可以进入下一步,找解决方案了。一般说来,找一个解决方案并不难,甚至找好几个方案也不难;但是找出一个好的、最优的解决方案是真心不容易。
为什么这么说呢?
因为实际生产环境很复杂,而且会出现各种各样的特殊场景。
针对某个具体场景提出的一个解决方案,多半并不能适应所有的场景。
所以,对提出的各种方案进行评估时,我们必须考虑各种情况下这个方案可能的表现。如果一个方案在某些情况下会导致其他严重的问题,这个方案或许就不是一个好的方案。
但同时你也需要意识到,任何解决方案都有长短,有 Tradeoff。如果苛求一个能在所有场景下都最优的解决方案,往往是缘木求鱼,是不现实的。
比如一种优化方案,可以让平均响应时间最小,但高百分位比较高。另外一种优化方案正好相反。那我们就需要考虑对自己来说哪种指标更重要。也就是说,我们经常需要在不同性能指标间权衡,以找到一个最优解能达到总体和整体最优。
这就需要我们有一个整体的意识和判断。
或许一个方案并不能面面俱到,在有些场景下性能不好。但是不同场景的出现概率不同,对其它模块造成的影响也不一样,并且最终客户的体验也不尽相同。这些因素都要考虑到取舍的决策过程中。
综合以上因素,在实际的优化过程中,我们经常会反复权衡利弊和取舍来做最终决定。
以上是性能优化的“三要”原则,受篇幅所限,“三不要”原则将在下文分享,欢迎持续关注。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(1)
- 最新
- 精选
- 小斧1. 要优先查最大的性能瓶颈 2. 要确诊性能问题的根因 3. 要考虑各种情况下的性能
收起评论