0 写在前面
当我们的服务在运行时,其CPU负载如果超过了我们的预期,或者超过机器所能接受的限度时,我们都希望能够一系列手段来降低服务的负载。然而,有时候我们并不能通过阅读代码来确定病因。因此,善用CPU分析工具,可以帮助我们更快地定位原因,并针对性的进行优化。常用的工具一般有perf等。本文介绍一种使用gperftools中的cpu profile可视化工具来调试程序CPU性能的方法(NOTE: 目前cpu profile功能可能存在运行coredump问题,详细参考下文相关解释)。
1 开启cpu profile
首先我们需要修改源码。在需要采样程序CPU利用率的起始位置和结束位置分别添加对应的代码:
#include "gperftools/profiler.h"
std::string profilename(PATH_TO_YOUR_PROFILE);
ProfilerStart(profilename.c_str());
/*your sources codes start
.....
*/
ProfilerStop();
由此可以看到,使用cpu profile是依赖gperftools的。因此需要下载google-gperftools,并需要你的程序链接libprofiler和libunwind。
下一步就是运行程序:
env CPUPROFILE=/path/to/profile YOUR-PROGRAM PROGRAMS-ARGS
CPUPROFILE是一个环境变量