极客视点
极客时间编辑部
极客时间编辑部
113245 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/05:21
登录|注册

性能优化“三要”原则

讲述:丁婵大小:7.36M时长:05:21
你好,欢迎收听极客视点。
在实际的性能优化中,需要考虑的因素很多,也经常需要在多个角度和目标间做一些平衡和取舍。为了帮助你把握这些,Facebook 性能优化和容量管理高级专家庄振运在他的《性能工程高手课》中总结出了六条原则,并把它们概括为:“三要,三不要”,以下是性能优化的“三要”原则。

1. 要优先查最大的性能瓶颈

任何一个应用程序或者系统,总会有很多地方可以优化。
可是你知道要从何处下手吗?
其实你可以参考古人的观点,唐代的诗人杜甫说过:“射人先射马,擒贼先擒王”。会打仗的将军,一定会从“最值得打的地方”开始,性能优化工作也是如此。
我们永远都要优先从最大的性能瓶颈入手。
一般来讲,如果找到最大的性能瓶颈,并且解决了它,那这个系统的性能会得到最大的提升(参见第 4 讲帕累托法则)。反之,如果不解决最大的性能瓶颈,反而退而求其次,去解决了其他的性能问题,整个系统的性能或许会更高一些,但是提升的程度往往是非常有限的。
比如,一个应用程序的最大性能瓶颈是 CPU 的使用率太高;而其他种类型的资源,比如网络和存储,都很有富余。这种情况下,如果你去优化网络和存储方面,显然是不能大幅度地提升整体性能的。
不过这里有个稍微特殊的情况,就是内存。因为内存的分配和回收也会消耗一些 CPU 资源,如果这时去优化内存使用,很多时候,的确会帮助你降低 CPU 使用率,不过降低的幅度一定是很有限的。
归根结底,要降低 CPU 的使用率,最有效的方法是做性能分析和剖析,找出程序中使用 CPU 最多的地方,然后对症下药地做优化。

2. 要确诊性能问题的根因

程序和系统如果在某个地方有性能瓶颈,肯定是这个地方的资源不够用了,不管是 CPU、内存还是网络(参见第 14 讲)。
所以,当我们确定了最大的性能瓶颈后,就需要对这一性能瓶颈做彻底的性能分析,找出资源不够使用的原因,也就是考察使用资源的地方。
一种资源被使用的地方往往有好几个,我们需要一个一个地去分析考虑。只有彻底分析了各种使用的情况,才能进一步找出最主要的,也是最可能优化的原因,对症下药。
有些资源使用的原因也许是完全合理的。对这些合理的使用,有些或许已经仔细优化过了,很难再做优化。而另外一些则有可能继续优化。对资源的不合理使用,我们就要尽量想办法去掉。
对于需要优化的地方,我们就需要进一步考虑优化工作的投入产出比例,就是既考虑成本,也考虑带来的好处。因为有些情况下,虽然你可以去优化,但获得的收益并不大,所以不值得去做。
另外要提醒你的是,确诊性能问题的原因有时候非常困难,需要做多方面的性能测试、假设分析并验证。
比如 CPU 的使用,有操作系统的原因,有应用程序的原因,但也有些 CPU 的问题,是在非常边缘的场景下才发生的。为了暴露问题,我们经常需要创造特殊的场景来重现遇到的性能问题。

3. 要考虑各种情况下的性能

性能问题确诊原因后,我们就可以进入下一步,找解决方案了。一般说来,找一个解决方案并不难,甚至找好几个方案也不难;但是找出一个好的、最优的解决方案是真心不容易。
为什么这么说呢?
因为实际生产环境很复杂,而且会出现各种各样的特殊场景。
针对某个具体场景提出的一个解决方案,多半并不能适应所有的场景。
所以,对提出的各种方案进行评估时,我们必须考虑各种情况下这个方案可能的表现。如果一个方案在某些情况下会导致其他严重的问题,这个方案或许就不是一个好的方案。
但同时你也需要意识到,任何解决方案都有长短,有 Tradeoff。如果苛求一个能在所有场景下都最优的解决方案,往往是缘木求鱼,是不现实的。
比如一种优化方案,可以让平均响应时间最小,但高百分位比较高。另外一种优化方案正好相反。那我们就需要考虑对自己来说哪种指标更重要。也就是说,我们经常需要在不同性能指标间权衡,以找到一个最优解能达到总体和整体最优
这就需要我们有一个整体的意识和判断
或许一个方案并不能面面俱到,在有些场景下性能不好。但是不同场景的出现概率不同,对其它模块造成的影响也不一样,并且最终客户的体验也不尽相同。这些因素都要考虑到取舍的决策过程中。
综合以上因素,在实际的优化过程中,我们经常会反复权衡利弊和取舍来做最终决定
以上是性能优化的“三要”原则,受篇幅所限,“三不要”原则将在下文分享,欢迎持续关注。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • 小斧
    1. 要优先查最大的性能瓶颈 2. 要确诊性能问题的根因 3. 要考虑各种情况下的性能
收起评论
大纲
固定大纲
1. 要优先查最大的性能瓶颈
2. 要确诊性能问题的根因
3. 要考虑各种情况下的性能
显示
设置
留言
1
收藏
32
沉浸
阅读
分享
手机端
快捷键
回顶部