本文将要学习如何使用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的技术研究室”,持续分享信创、软件性能测试、调优、编程技巧、软件调试技巧相关内容,输出有价值、有沉淀的技术干货。