C++常用性能分析工具

top

1.无论你开发的是什么样的应用程序,敲个 top 命令,就能够简单直观地看到 CPU、内存等几个最关键的性能指标。top 展示出来的各项指标的含义都非常丰富。
2.一个是按“M”,看内存占用(RES/MEM),另一个是按“P”,看 CPU 占用,这两个都会从大到小自动排序,方便你找出最耗费资源的进程。另外,你也可以按组合键“xb”,然后用“<>”手动选择排序的列,这样查看起来更自由。

pstack

pstack 可以打印出进程的调用栈信息,有点像是给正在运行的进程拍了个快照,你能看到某个时刻的进程里调用的函数和关系,对进程的运行有个初步的印象。

strace

1.strace 可以显示出进程的正在运行的系统调用,实时查看进程与系统内核交换了哪些信息。
2.把 pstack 和 strace 结合起来,你大概就可以知道,进程在用户空间和内核空间都干了些什么。当进程的 CPU 利用率过高或者过低的时候,我们有很大概率能直接发现瓶颈所在。

perf

1.perf 可以说是 pstack 和 strace 的“高级版”,它按照固定的频率去“采样”,相当于连续执行多次的 pstack,然后再统计函数的调用次数,算出百分比。只要采样的频率足够大,把这些“瞬时截面”组合在一起,就可以得到进程运行时的可信数据,比较全面地描述出 CPU 使用情况。
2.常用的 perf 命令是“perf top -K -p xxx”,按 CPU 使用率排序,只看用户空间的调用,这样很容易就能找出最耗费 CPU 的函数。
3.总之,使用 perf 通常可以快速定位系统的瓶颈,帮助你找准性能优化的方向。

gperftools

1.Google Performance Tools。它是一个 C++ 工具集,里面包含了几个专门的性能分析工具(还有一个高效的内存分配器 tcmalloc),分析效果直观、友好、易理解,被广泛地应用于很多系统,经过了充分的实际验证。
2.gperftools 的性能分析工具有 CPUProfiler 和 HeapProfiler 两种,用来分析 CPU 和内存。不过,如果你听从我的建议,总是使用智能指针、标准容器,不使用 new/delete,就完全可以不用关心 HeapProfiler。
3.CPUProfiler 的原理和 perf 差不多,也是按频率采样,默认是每秒 100 次(100Hz),也就是每 10 毫秒采样一次程序的函数调用情况。