




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在运行阶段,C++静态程序变成了动态进程,是一个实时、复杂的状态机,由CPU全程掌控。但因为CPU的速度实在太快,程序的状态又实在太多,所以前几个阶段的思路、方法(Test)和性能分析(PerformanceProfiling)调试你一定很熟悉了,常用的工具是GDB,我面的“轻松话题”里也讲过一点的使用技巧。它的关键是让高速的CPU慢下来,把它降速到和人类大脑一样的程度,于是,我们就可以跟得上CPU的节奏,理清楚程序的动态流程。发现Bug,调试去解决Bug,再返回给测试验证。好的测试对于软件的成功至关重要,有你可以把它跟CodeRevew对比一下。CodeReview是一种静态的程序分析方法,在编码阶段通过观察源码来优化程序、找出隐藏的Bg在运段序的信息整合究,软件,一步优化性能提供依据,指明方向。从这个粗略的定义里,你可以看到,性能分析的关键就是“测量性能分析的范围非常广,可以从CPU利用率、内存占用率、网络吞吐量、系统延迟等许多今天,我只讲多数时候最看重的CPU性能分析。因为CPU利用率通常是评价程序运行的好也大多与CPU其实,Linux系统自己就内置了很多用于性能分析的工具,比如top、sar、vmstat、netstat,等等。但是,Linux比”的工具:top、pstack、straceperf。它们用起来很简单,而且实用性很强,可以toptopCPU、内存等几个最关键的性能指标。top一个是按“M”,看内存占用(RES/MEM),另一个是按“P”CPU另外,你也可以按组合键“xb”我曾经做过一个“魔改”Nginxtop从topCP现某个指标超出了预期,就说明可能存在问题,接下来,你就应该采取更具体的措施去进一比如说,这里面的一个进程CPU使用率太高,我怀疑有问题,要深入进程内部,看看到底是哪些操作消耗了CPU。这时,我们可以选用两个工具:pstack和stracepstack可以打印出进程的调用栈信息,有点像是给正在运行的进程拍了个快照,你能看到ZMQ不过,pstackstrace把pstack和strace结合起来,你大概就可以知道,进程在用户空间和内核空间都干了些什么。当进程的CPU利用率过高或者过低的时候,我们有很大概率能直接发现瓶颈所在。perfperfpstackstrace续执行多次的pstack,然后再统计函数的调用次数,算出百分比。只要采样的频率足够出CPU使用情况。我常用的perf命令是“perftop-K-pxxx”,按CPU使用率排序,只看用户空间的调用,这样很容易就能找出最耗费CPU的函数。比如,下面这张图显示的是大部分CPU时间都消耗在了ZMQ库上,其中,内存拷贝调用居然达到了近30%,是不折不扣的“大户”。所以,只要能把这些拷贝操作减少一点,就总之,使用perf通常可以快速的瓶颈,帮助你找准性能优化的方向。课下你也可以自己尝试多分析各种进程,比如Redis、MySQL,等等,观察它们都在干什么。top、pstack、strace和perf属于“非侵入”式的分析工具,不需要修改源码,就可以在在这里,我要推荐一个专业的源码级性能分析工具:Performanceolsgptools。它是一个C++工具集,里面包含了几个专门的性能分析工具(tc),分析效果直观、友好、易理解,被广泛地应用于很多系统,经过了充分的实际验证。代代apt-get apt-getinstall gperftools的性能分析工具有CPUProfiler和HeapProfiler两种,用来分析CPU和内new/delete,就完全可以不用关心HeapProfiler。CPUProfilerperf100(100Hz),也就是每10毫秒采样一次程序的函数调用情况。shared_ptrvoid*可以在智能指针析构的时候执行任意代码(简单的RAII惯用法):代代automake_cpu_profiler[](conststring&//lambda//33456789{ std::shared_ptr<void>(null}代代123456789autocp=autostr=//for(inti=0;i<1000;i++)//auto=make_regex(R"(^(\w+)\:(\w+)$)");autowhat=assert(regex_match(str,what,//}forgperftools编译运行后会得到一个“case1.perfgperftools二进制的,不能直接查看,如果想要获得可读的信息,还需要另外一个工具pprof。但是,pprof并不含在apt-get的安装包里,所以,你还要从 上源码,代代12345gitpprof--text./a.outcase1.perf>Total:7264474484493435std::22 26 2322pprofperf代代12apt-getinstallgit--sv”“--clped代代12345pprof--svg./a.outcase1.perf>pprof--collapsed./a.outcase1.perf>case1.cbtflamegraph.plcase1.cbt>flame.svgflamegraph.pl--invert--coloraquacase1.cbt>我就拿最方便的火焰图来“看图说话”吧。你也可以 上找到原图由于C++有名字空间、类、模板等特性,函数的名字都很长,看起来有点费劲,不过这样也比纯文本要直观一些,可以很容易地看出,正则表达式占用了绝大部分的CPU时间。再仔细观察的话,就会发现,_Compiler()这个函数是真正的“罪魁祸首”。代代123456auto=make_regex(R"(^(\w+)\:(\w+)$)");autowhat=for(inti=0;i<1000;{assert(regex_match(str,what,////再运行程序,你会发现程序瞬间执行完毕,而且因为优化效果太好,gperftools甚至都来基本的gperftools用法就这么多了,你可以再去看它的文档了解的用法,比如使用环境变量和信号来控制启停性能分析,或者tcmalloc库,优化C++的内存分goodenough),而调试和测试回答的是为什么系统“不好”(notgood)。最简单的性能分析工具是top,可以快速查看进程的CPUpstack和straceperfCPUgperftools直性能分析与优化是一门艰深的课题,也是一个广泛的议题,CPU今天介绍的这些,是我挑选的对初学者最有用的内容,学习难度不高,容易上手,见效快。希望你能以此为契机,在今后的日子里多用、多实际操作,并且不断去探索、应用其他的分析工具,综合运用它们给程序,才能让C++在运行阶段跑得更好更快更稳,才不辜负前面编码、预处理和编译阶段的苦心与努力。 不得售卖。页面已增加防盗追踪,将依法其上一 17|语言:搭建高性能的混合系下一 轻松话题(一)|4本值得一读再读
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软件开发项目管理与质量控制流程手册
- 三农工作综合实施方案
- 农业产业化发展专项工作方案
- 应急救援项目可行性研究报告
- 垃圾焚烧发电发展模式
- 智能仓库物流
- 房地产项目投资可行性研究报告
- 高新技术企业研发团队建设与管理
- 软件工程流程与开发方法
- rdpac肿瘤复习测试卷含答案
- 新会计法下加强企业财会监督策略研究
- 人力资源社会保障宣传工作计划及打算
- 2024年秋儿童发展问题的咨询与辅导终考期末大作业案例分析1-5答案
- 广东省广州市2021年中考道德与法治试卷(含答案)
- 2024年贵州省公务员录用考试《行测》真题及答案解析
- 2024-2030年中国滑板车行业竞争策略及发展前景预测报告
- 学校军事化管理培训
- 丧葬费家庭协议书范文范本
- 中小学生德育工作指南2022版
- 通信工程建设标准强制性条文汇编(2023版)-定额质监中心
- JJF(浙) 1171-2019 原子荧光形态分析仪校准规范
评论
0/150
提交评论