这是谷歌的一个linux下性能测试的小工具。贼好用。可以简单快速的发现程序的性能瓶颈,长话短说。
第一步拿到压缩包
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.5/gperftools-2.5.tar.gz
第二步./configure
第三部 make -j 4 && make install
搞定!
如果./configure 中遇到unwind 的库没有找到,请直接忽略。
2.1 在c++程序编译的时候加上 -lprofiler
2.2 运行的时候使用CPUPROFILE=./pprofRes ./main(pprofRes是pprof产生的结果,main是你的可执行程序)
目前我所知道的两种分析方式,一种是文本,另外一种是pdf格式。我主要用pdf格式。
3.1 pprof --text ./main pprofRes 生成文本,一般要用>放到test.txt内
3.2 pprof --pdf ./main pprofRes 生成pdf格式,同理一般用>放到test.pdf内。
系统瓶颈。一般来说,百分比越大就说明在那里耗时多。
其中pdf每项的含义如下:
描述 |
|
---|---|
Class Name |
类名,非类成员函数此项为空 |
Method Name |
函数名 |
local (percentage) |
当前函数直接执行的指令所消耗的CPU时间(包括内联函数)(百分比) |
of cumulative (percentage) |
当前函数的local时间及其调用的函数的local时间总和(百分比),如果与local相同,则不显示 |
其中如果想在Python中使用PProf,则可以使用yep这个Python的插件,使用办法如下:
python -m yep -v -- main.py
运行完上述代码后,会生成一个main.py.prof的文件,然后使用:
pprof --text `which python` main.py.prof
即可
在2.2时,可能会出现找不到libprofiler.so.0的情况,使用whereis libprofiler.so.0 查一下。再不行就find /查一下,自己拿肉眼看。
在2.2时,可能会找不到CPUPROFILE,我记得这个东西是需要 export的。需要时可以自行百度。
在3.2时,可能会出现 not find dot & ps2pdf 这是你没装转换成pdf的两个关键工具。使用yum install ghostscript就好了。会安装好上述两个工具。
所有找不到库的都用export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:目标目录解决。
如果需要更加详细的某一代码块的耗时情况,可以使用ProfilerStart(), ProfilerStop();这两个函数,分别加在代码的开始端和结束端。需要头文件,也自行百度吧。