18 | 性能分析:找出程序的瓶颈
该思维导图由 AI 生成,仅供参考
运行阶段能做什么
- 深入了解
- 翻译
- 解释
- 总结
文章介绍了在程序运行阶段进行性能分析的重要性以及如何找出程序的瓶颈。作者首先指出在运行阶段能做的事情主要有调试、测试和性能分析。性能分析是一种动态的程序分析方法,通过采集程序的各种信息来找出软件运行的“瓶颈”,为进一步优化性能提供依据。文章重点介绍了CPU性能分析,并推荐了四个“高性价比”的工具:top、pstack、strace和perf。作者详细介绍了这些工具的使用方法和如何通过它们来观测程序的外部参数和内部函数调用,从而分析程序性能。通过这些工具,读者可以快速定位系统的瓶颈,找准性能优化的方向。此外,文章还介绍了一个专业的源码级性能分析工具gperftools,它能够生成文本或者图形化的分析报告,最直观的方式是火焰图。最后,文章提出了两个思考题,引导读者深入思考和探索性能分析的更多内容。整体而言,本文为读者提供了在程序运行阶段进行性能分析的重要性以及实用工具的详细介绍,对于需要进行程序性能优化的技术人员具有一定的参考价值。
《罗剑锋的 C++ 实战笔记》,新⼈⾸单¥59
全部留言(17)
- 最新
- 精选
- CoderArthur罗老师,能加个微信吗?我的微信是: sail_0323。 30岁了,有些彷徨,不知道该坚持哪些,放弃哪些。想请老师指点指点! 估计有不少同学和我有一样的心声。到时候老师还可以把这个作为轻松话题。
作者回复: 1.微信这个比较私人,我觉得不要公开出来比较好。 2.可以上GitHub提issue,或者上面也有我的邮箱,发邮件也可以。 3.30岁正年轻啊,我32岁才写了第一本书,感觉这有点像是“少年维特之烦恼”。多看看极客时间大伽的观点,程序员还是很有前途的,路还是要自己走。
2020-06-16225 - eletariorWindows下的使用 wpr 和 wpa ,通过pdb文件直达堆栈,也很方便
作者回复: Windows很久没用了,欢迎经验分享。
2020-06-1628 - 黄骏性能分析接触一些,实践经验较少,每次写完一个大一些的功能,自己都用perf来看下,抓下数据,看自己代码的cpu使用率咋样。
作者回复: 这样就是很好的实践了,可以参考课程再试试gperftools和火焰图。
2020-06-176 - EncodedStar推荐大家可以看看极客时间倪鹏飞老师的linux性能分析系统实战 老师这节总结的确实好,再次感谢老师~
作者回复: 性能分析范围太大,一节课的内容只能结合C++讲最实用的几个技巧,大家后面可以深入研究。
2020-06-166 - robonix请问老师有什么好的检查内存泄露的方法?
作者回复: 最著名的就是valgrind,网上有很多资料。 也可以用gperftools里的heapProfiler,还有agentzh的内存火焰图。 但最好的方法是从写代码的根上解决,不用new/delete,尽量用智能指针、容器还有内存池。
2020-07-224 - EncodedStar老师,火焰图可以在已经运行的程序中画出来吗?我看到命令都是./a.out ,而且这个程序运行一个while true的话是不是图片特别大? 有没有像perf top -K -p xxx 这样的,直接观察在执行的进程
作者回复: 可以向运行的进程发信号,然后在代码里收到信号后调用ProfilerStop,这样就可以随时生成火焰图。 或者用systemtap,不需要加gperftools代码,也可以生成火焰图,可以参考一下小贴士里的openresty xray。
2020-06-164 - zzuse老师,在centos7 arm64鲲鹏架构下,用 gperftools 的 cpu profiler 会出现死锁,尝试后也感觉好难解决。是不是尝试其他工具了
作者回复: 可以试试在GitHub上提issue,看能否引起开发团队的注意进而解决。 暂时不行就用perf吧,只是性能优化不那么自由灵活,但也基本够用。
2020-08-022 - 泰一valgrind-callgrind + kcachegrind = 电路图 也是利器
作者回复: valgrind我用的比较少,对systemtap和火焰图更喜欢一些。
2020-06-162 - 王鲜申Intel 的 VTune 也非常好用,推荐大家尝试一下
作者回复: great.
2023-10-24归属地:上海 - 学习者打卡,这块的内容对我还太深奥,后面再二刷吧
作者回复: keep going.
2023-05-21归属地:广东