在进行模块的负载优化时,使用了 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 是通过采样的方式工作的,如果程序运行时间太短,会导致样本不足从而造成分析结果不准确。关于图形化分析结果更详细的解释,可以参考此处。