使用 gperftools 进行 C++ 代码性能分析

使用 gperftools 进行 C++ 代码性能分析
最新回答
隨遇而安

2020-06-11 17:31:56

在进行模块的负载优化时,使用了 Google 开发的 gperftools 工具来进行代码性能分析。

gperftools 是一系列高性能多线程 malloc() 实现的集合,同时添加了一些精巧的性能分析工具。

gperftools 性能分析工具主要包括五部分,本文将使用 CPU Profiler 和 pprof 进行代码性能分析。

在命令行中通过 apt 安装 autoconf、automake、libtool。

gperftools 在 64 位操作系统下需要 libunwind 库的支持,可直接执行命令进行安装。

gperftools 使用 graphviz 将代码性能分析结果进行图形化显示,可通过 apt 直接安装 graphviz。

gperftools 可直接执行命令进行安装。

下文中将使用的 C++ 工程 Demo 可点击此处下载。

在使用 gperftools 进行代码性能分析前,需要进行代码插桩。

完整的插桩示例:file_name.prof 表示 .prof 文件的文件名。

编译时需要将 profiler 库和 libunwind 库链接到可执行程序。

找到编译得到的可执行程序,在终端中运行。

正常情况下,会生成一个 .prof 文件,如果报动态链接库找不到的问题,手动执行下动态链接库的管理命令 ldconfig 即可。

ldconfig 可执行程序存放在 /sbin 目录下,通常在系统启动时运行,而当用户安装了一个新的动态链接库时,需要手动运行这个命令。

运行 ldconfig 会刷新动态装入程序 ld.so 所需的链接和缓存文件 /etc/ld.so.cache(此文件保存了已排好序的动态链接库名字列表),实现动态链接库为系统所共享。

通过 pprof 解析 .prof 文件,解析得到的 .pdf 文件中保存了图形化的代码性能分析结果。

每一个方框表示一个进程,有向边表示进程间的调用关系。方框越大,表示该进程耗时越高。

需要注意的是,gperftools 的 CPU Profiler 是通过采样的方式工作的,如果程序运行时间太短,会导致样本不足从而造成分析结果不准确。

关于图形化分析结果更详细的解释,可以参考此处。