
outline:关注&指标&度量,根底理论知识,工具&方法,最好实践,参考资料

性能优化关注:CPU、内存、磁盘IO、网络IO等四个方面。

性能指标:吞吐率、相应时间、QPS/IOPS、TP99、资源利用率是我们常常关注的指标。

时间度量:从cpu cycle到网络IO,自上到下,时间量级越大。

监控、分析、优化,三部曲,以终为始,循环往复。

优化性能,必要一些体系编程知识。

提拔处置惩罚本领、淘汰盘算量是优化的2个根本方向。

优化大家格雷格画的图,吊炸天,你应当很认识,gregg亲手实现了一些工具。

借助工具定位性能瓶颈。gprof2dot.py可以处置惩罚多种采样输出数据
发起利用perf等非侵入式的profiling工具。

perf不但仅可以定位cpu瓶颈,还可以检察许多方面,好比缺页,分支展望失败,上下文切换等。

IO瓶颈,你应当知道的知识。

有关锁的知识,你应当知道的。

多线程的学问很大

内存管理的方方面面

最好实践,没有充足来由,你不应当违反。

你应当懂得的。

关于排序,你应当知道的。

这些资料不错,你值得拥有。
假如对你有资助,请帮助转发,让更多朋侪收益。
- 一样平常性原则
- 依据数据而不是凭空推测
- 忌过早优化
- 忌过分优化
- 深入明白业务
- 性能优化是长期战
- 选择适宜的权衡指标、测试用例、测试情况
- 性能优化的条理
- 需求阶段
- 计划阶段
- 实现阶段
- 一样平常性方法
- 缓存
- 并发
- 惰性
- 批量,归并
- 更高效的实现
- 缩小解空间
- 性能优化与代码质量
- 总结
依据数据而不是凭空推测
这是性能优化的第一原则,当我们疑心性能有题目的时间,应当通过测试、日记、profillig来分析出那里有题目,对症下药,而不是凭感觉、撞运气。一个体系有了性能题目,瓶颈有大概是CPU,有大概是内存,有大概是IO(磁盘IO,网络IO),大方向的定位可以利用top和stat系列来定位(vmstat,iostat,netstat...),针对单个历程,可以利用pidstat来分析。
在本文中,首要讨论的是CPU相干的性能题目。按照80/20定律,绝大多数的时间都消耗在少量的代码片断内里,找出这些代码唯一可靠的办法就是profile,我所知的编程语言,都有相干的profile工具,纯熟利用这些profile工具是性能优化的第一步。
忌过早优化
The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature optimization is the root of all evil (or at least most of it) in programming.
我并不非常清晰Donald Knuth说出这句名言的上下文情况,但我本身是非常认同这个观念的。在我的工作情况(和典范的互联网运用英魂开辟)与编程模式下,寻求的是快速的迭代与试错,过早的优化每每是无勤奋。而且,过早的优化很轻易拍脑壳,优化的点每每不是真实的性能瓶颈。
忌过分优化
As performance is part of the specification of a program – a program that is unusably slow is not fit for purpose
性能优化的目的是寻求适宜的性价比。
在差别的阶段,我们对体系的性能会有肯定的要求,好比吞吐量要到达多少多少。假如达不到这个指标,就必要去优化。假如能满意预期,那么就无需耗费时间精神去优化,好比只有几十个人利用的内部体系,就不消按照十万在线的目的去优化。
而且,背面也会提到,一些优化方法是“有损”的,大概会对代码的可读性、可维护性有副作用。这个时间,就更不能过分优化。
深入明白业务
代码是效劳于业务的,大概是效劳于终究用户,大概是效劳于其他步伐员。不相识业务,很难明白体系的流程,很难找出体系计划的不敷的地方。背面还会提及对业务明白的紧张性。
性能优化是长期战
当焦点业务方向明白以后,就应当开始关注性能题目,当项目上线以后,更应当连续的举行性能检测与优化。
如今的互联网产物,不再是一锤子交易,在上线以后还必要连续的开辟,用户的涌入也会带来性能题目。因此必要主动化的检测性能题目,保持稳固的测试情况,连续的发现并办理性能题目,而不是被动地比及用户的投诉。
选择适宜的权衡指标、测试用例、测试情况
正由于性能优化是一个恒久的举动,以是必要固定权衡指标、测试用例、测试情况,如许才气客观反映性能的现实环境,也能揭示出优化的结果。
权衡性能有许多指标,好比体系相应时间、体系吞吐量、体系并发量。差别的体系焦点指标是不一样的,起首要明白本体系的焦点性能诉求,固定测试用例;其次也要分身其他指标,不能顾此失彼。
测试情况也很紧张,有一次忽然发现我们的QPS高了很多,但是步伐压根儿没优化,查了半天,才发现是换了一个更牛逼的物理机做测试效劳器。
说点什么...