一,性能分析工具的使用(gprof)
- 编译需要加-pg选项
- 运行可执行文件,会自动生成生成gmon.out 文件,命令格式如下:
./a.out #a.out指可执行文件
- 使用gprof生成性能分析结果,命令格式如下:
gprof ./a.out gmon.out >out.log
//命令中 a.out为可执行文件;gmon.out为第二步自动生成的结果;out.log为性能分析结果
此时可以直接打开out.log查看结果
二,性能分析工具的使用(valgrind)
Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它包含一个内核──一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等。Valgrind可以检测内存泄漏和内存违例,还可以分析cache的使用等,灵活轻巧而又强大,能直穿程序错误的心脏,真可谓是程序员的瑞士军刀。
使用callgrind工具生成性能分析数据
命令格式如下:
valgrind --tool=callgrind ./exproxy
其中 ./exproxy就是我们要分析的程序。执行完毕后,就会在当前目录下生成一个文件。文件名为“callgrind.out.进程号”。
如果你调试的程序是多线程,你也可以在命令行中加一个参数 -separate-threads=yes。这样就会为每个线程单独生成一个性能分析文件。如下:
valgrind --tool=callgrind --separate-threads=yes ./exproxy
生成的文件除了callgrind.out.31113外,还会多出一些子线程的文件。文件名如下:
callgrind.out.31113-01 callgrind.out.31113-02 callgrind.out.31113-03
三,将性能分析结果可视化
1,安装gprof2dot工具,具体安装步骤见附录。
2,运行gprof2dot工具生成可视化图,gprof结果格式为:
python gprof2dot.py out.log |dot -Tpng -o output.png
callgrind格式为:
python gprof2dot.py -f callgrind callgrind.out.5627 |dot -Tpng -o output.png
运行完之后,打开output.png图片查看结果
注:gprof2dot默认是部分函数调用图,对性能影响不大的函数调用都不显示,例如类的构造,析构函数等。
如果想要显示全部的函数调用,可以 gprof2dot -n0 -e0 ,默认是n0.5即影响小于5%的函数就不显示了。
当然这样图片会很乱,因为显示内容很多。同时可以 加上 -s 参数,表示不显示诸如模板,函数入口参数等等,使得
函数名称显示更加精简。
eg:
python gprof2dot.py -n0 -e0 -s out.log |dot -Tpng -o output.png
附:gprof2dot安装步骤
1,gprof2dot下载地址
https://github.com/jrfonseca/gprof2dot
2,安装python和graphviz
python最低版本为2.7,python3也支持。graphviz的安装主要是支持dot功能。具体安装方法如下:
On Debian/Ubuntu run:
apt-get install python3 graphviz
On RedHat/Fedora run
yum install python3 graphviz
3,gprof2dot安装
如果pip可以安装则直接可以通过以下命令直接安装。
pip install gprof2dot
用此方法安装后,在使用时可以直接用以下命令可视化
gprof2dot -f callgrind callgrind.out.15668 |dot -Tpng -o output.png
若此方法安装不了,可以直接下载gprof2dot包,然后解压,以后每次执行的时候把输出文件拷贝到和gprof2dot.py同一个目录下即可。
gprof2dot包地址:https://github.com/jrfonseca/gprof2dot/archive/master.zip
参考:
https://www.cnblogs.com/rocketfan/archive/2009/11/15/1603465.html