简介
使用gperftools统计相关
准备
安装
性能监控工具gperftools-2.9.1
,发布时间是2021-03-03。
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。
tar xvf libunwind-1.5.0.tar.gz
cd libunwind-1.5.0
./configure
make -j8
sudo make install
需要安装软件graphviz
、gv
。
CPU分析需要了解的知识
CPU占用分析工具工作时,将会通过探针程序产生一个.prof
二进制文件。这种文件格式说明信息可以查看这份文档
引入library库到应用中
可以在编译过程中直接使用-lprofiler
,将监控库连接到我们的executable程序中。还有一种方式通过修改环境变量LD_PRELOAD
引入到其中。LD_PRELOAD="/usr/lib/libprofiler.so" <binary>
。
running the code
有几种方式能真实开启CPU profiling
。
- 通过定义环境变量将某个exe文件执行过程的效果输出到prof文件中;
env CPUPROFILE=ls.prof /bin/ls
- 通过环境变量将开启或者关闭性能监控;
env CPUPROFILE=chrome.prof CPUPROFILESIGNAL=12 /bin/chrome &
# 第一次执行的时候开启
# 后面执行一次关闭
killall -12 chrome
- 在代码里面
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。
实例:
➜ 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
分析输出
pprof --dot ./testbenchmark ./recast.prof.0 > recast.dot
通过命令行生成dot文件。其实还能生成很多其他种类的文件类型。
参考
- [1] gperftools-源码
- [2] libunwind 1.5.0-源码
- [3] gperftools-手册