使用gperftools对C++程序进行profile定位性能瓶颈

56 阅读2分钟

本文将要学习如何使用gperftools工具定位C/C++程序的性能瓶颈,并用kcachegrind工具进行可视化展示。

gperftools简介

gperftools(Google Performance Tools)是由谷歌开源的性能分析工具,能够对程序进行profile,通俗的讲就是能够以一定的频率对程序的堆栈进行采样,采样的次数越高,说明这个堆栈对应的代码越热。这个功能对于定位性能瓶颈十分有用。
本文选用gperftools的原因有几点:
(1)非侵入性,也就是不用改应用代码;
(2)对应用性能影响相对小,对比valgrind等工具;
(3)支持分析多线程程序。
注:此工具的安装和详细信息请参考官方网站

示例代码

#include <iostream>
using namespace std;
void func2()
{
    static int i = 0;
    ++i;
}
void func3()
{
    static int i = 0;
    ++i;
}
void func1()
{
    for (;;) {
        for (int j = 0; j < 3; ++j) {
            func2();             
        }
        func3();                 
    }
}
int main()
{
    func1();
    return 0;
}

操作系统:Linux
g++版本:9.3.1
编译命令: g++ test.cpp -o test -g
代码分析:以上代码中main函数调用func1函数,在func1函数中无限循环调用func2和func3函数。

热点定位

本文首发于VX公众号「Hankin-Liu的技术研究室」
完整版包含 6个章节,本文先公开部分章节,剩余部分将在 1 周后 同步过来。 关注公众号后,发送关键词:”性能调优群“或“C++群",加入技术交流群,可免费解答和交流性能调优相关技术问题。

完整内容还包括:

  • 热点定位详细步骤

欢迎关注VX公众号“Hankin-Liu的技术研究室”,持续分享信创、软件性能测试、调优、编程技巧、软件调试技巧相关内容,输出有价值、有沉淀的技术干货。