Abel'Blog

我干了什么?究竟拿了时间换了什么?

0%

C++-gperftools使用

简介

使用gperftools统计相关

准备

安装

性能监控工具gperftools-2.9.1,发布时间是2021-03-03。

1
2
3
4
5
tar xvf gperftools-2.9.1.tar.gz
cd gperftools-2.9.1
./configure
make -j8
sudo make install

64bit需要这个库的支持libunwind-1.5.0.tar.gz,发布时间2020-11-11。

1
2
3
4
5
tar xvf libunwind-1.5.0.tar.gz
cd libunwind-1.5.0
./configure
make -j8
sudo make install

需要安装软件graphvizgv

CPU分析需要了解的知识

CPU占用分析工具工作时,将会通过探针程序产生一个.prof二进制文件。这种文件格式说明信息可以查看这份文档

引入library库到应用中

可以在编译过程中直接使用-lprofiler,将监控库连接到我们的executable程序中。还有一种方式通过修改环境变量LD_PRELOAD引入到其中。LD_PRELOAD="/usr/lib/libprofiler.so" <binary>

running the code

有几种方式能真实开启CPU profiling

  1. 通过定义环境变量将某个exe文件执行过程的效果输出到prof文件中;
1
env CPUPROFILE=ls.prof /bin/ls
  1. 通过环境变量将开启或者关闭性能监控;
1
2
3
4
env CPUPROFILE=chrome.prof CPUPROFILESIGNAL=12 /bin/chrome &
# 第一次执行的时候开启
# 后面执行一次关闭
killall -12 chrome
  1. 在代码里面ProfilerStart()函数(通过参数能指定输出内容)开启记录,ProfilerStop()函数结束。

可以通过阅读gperftools/profiler.h获取高级函数,包括ProfilerFlush()ProfilerStartWithOptions()

修改运行时行为。

你能通过修改环境变量参数对CPU Profiler做精细的控制。

CPUPROFILE_FREQUENCY=x默认值:100 CPU探测器每秒钟采样多少次中断。

CPUPROFILE_REALTIME=1默认值:未设置 如果设置为任何值(包括0或空字符串),请使用ITIMER_REAL而不是ITIMER_PROF来收集配置文件。一般来说,ITIMER_REAL不如ITIMER_PROF准确,而且与alarm()的使用交互也不好,所以请选择ITIMER_PROF,除非您有理由选择ITIMER_REAL。

实例:

1
2
3
4
5
6
➜  build git:(develop_abel) ✗ LD_PRELOAD="/usr/local/lib/libprofiler.so" CPUPROFILESIGNAL=12 CPUPROFILE=recast.prof ./testbenchmark /root/develop/robot_develop/server/res/space/Level04/level.bin.to
Using signal 12 as cpu profiling switch
# 当使用kill -12 去打断这个进程之后将会获得这样的日志
PROFILE: interrupts/evictions/bytes = 616/461/35064
# 在本地也会多一个文件出来:
recast.prof.0

分析输出

1
pprof --dot ./testbenchmark ./recast.prof.0 > recast.dot

通过命令行生成dot文件。其实还能生成很多其他种类的文件类型。

hrjfjf.png

参考