111升学论坛

 找回密码
 加入家园
专业、学校怎么选?免费公益咨询解答开通学校版块微信:543646没考上高中怎么办,不要慌!
热门:大连报关学校招生网增加印象分,实用新型专利包过申请发明专利申请并不难,代写全部材料,轻松申请!
查看: 615|回复: 14

性能之巅-优化你的程序

[复制链接]

30

主题

52

回帖

257

积分

中级会员

Rank: 3Rank: 3

积分
257
发表于 2021-2-22 21:40:40 | 显示全部楼层 |阅读模式
集群智慧云科服发明专利申请





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高了许多,但是程序压根儿没优化,查了半天,才发现是换了一个更牛逼的物理机做测试服务器。
回复

使用道具 举报

33

主题

93

回帖

396

积分

中级会员

Rank: 3Rank: 3

积分
396
发表于 2021-2-22 21:44:57 | 显示全部楼层
不是说会有一个优化实例吗?
回复

使用道具 举报

24

主题

53

回帖

265

积分

中级会员

Rank: 3Rank: 3

积分
265
发表于 2021-2-22 21:49:14 | 显示全部楼层
ppt能发一下吗
回复

使用道具 举报

20

主题

27

回帖

120

积分

新手上路

Rank: 1

积分
120
发表于 2021-2-22 21:53:31 | 显示全部楼层
个人性能优化还有一个关注点:锁。有时会发现机器资源还有空闲,但是性能提不上去,一般就是锁
回复

使用道具 举报

34

主题

37

回帖

241

积分

中级会员

Rank: 3Rank: 3

积分
241
发表于 2021-2-22 21:57:48 | 显示全部楼层
我们服务器每天不定时的负载会有10几分钟的负载突高 但cpu 内存 io 都没发现啥异常 这种情况是为啥呢?
回复

使用道具 举报

14

主题

58

回帖

239

积分

中级会员

Rank: 3Rank: 3

积分
239
发表于 2021-2-22 22:02:05 | 显示全部楼层
这些图留着可以坐ppt参考,拓展思路
回复

使用道具 举报

14

主题

52

回帖

219

积分

中级会员

Rank: 3Rank: 3

积分
219
发表于 2021-2-22 22:06:22 | 显示全部楼层
ppt做的不错 不过也没啥干货。。给产品经理比较好用
回复

使用道具 举报

46

主题

97

回帖

445

积分

中级会员

Rank: 3Rank: 3

积分
445
发表于 2021-2-22 22:10:39 | 显示全部楼层
看不清
回复

使用道具 举报

46

主题

97

回帖

445

积分

中级会员

Rank: 3Rank: 3

积分
445
发表于 2021-2-22 22:14:56 | 显示全部楼层
不错,感谢分享,希望能够有更多的分享关于性能优化这块
回复

使用道具 举报

31

主题

88

回帖

381

积分

中级会员

Rank: 3Rank: 3

积分
381
发表于 2021-2-22 22:19:13 | 显示全部楼层
挺好的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入家园

本版积分规则

QQ|Archiver|手机版|小黑屋|111升学论坛

GMT+8, 2024-9-20 05:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表