使用gperftools工具分析程序性能
背景
有时候需要分析一下程序的性能如何,然后去查找程序性能的瓶颈,进行性能优化。这里可以使用gperftools工具来帮助定位性能的瓶颈位置,进行程序性能分析。这里做一个环境配置及使用的记录。
安装gperftools
源码地址:
https://github.com/gperftools/gperftools
安装步骤:
1 | //如果是64位系统的,需要安装libunwind-dev,如果是32位系统不必 |
本地32位系统ubuntu14.04安装如下:
使用gperftools工具
使用gperftools工具需要在cmake里增加一些配置,运行程序时也需要配置环境,最后使用命令生成可视化程序性能分析报告。
(1)需要配置cmake
在cmake里增加一行配置如下
1 | target_link_libraries(${YOUR_PROGRAM} pthread profiler tcmalloc) |
如下图所示
(2)运行程序
运行程序的命令如下
1 | env HEAPPROFILE=./mybin.hprof ./wx_app |
本地运行程序如下:
这样就会生成报告mybin.hprof.0001.heap,如下图所示
注意:按照代码的意思应该是生成.hprof文件,但是自己结果只生成了一个heap文件(mybin.hprof.0001.heap),但是并不影响后面的操作
(3)进行pprof分析
程序分析指令如下:
1 | pprof --text ./wx_app ./mybin.hprof.0001.heap |
如下图所示
说明:
(1) 第一列表示直接使用了多少内存,单位为MB
(2) 第四列包含了该方法自己占用的以及所有他调用所占用的内存
(3) 第二列和第五列分别是第一列和第四列的百分比表示
(4) 第三列是第二列的一个综合
(4)生成可视化报告
另外,看pprof的参数,可以生成gif或者pdf文件:
1 | pprof --gif ./wx_app ./mybin.hprof.0001.heap > a.gif |
如果生成报告的时候有报错
那么需要安装如下依赖
1 | sudo apt-get install graphviz |
如下图所示
然后再次生成报告
打开pdf即可看到可视化报告
可以看出来,最影响性能的是_init,这个_init是gui图形初始化,经过查看,这个初始化是一个巨大的函数(超过3k行),里面没有细分多个栈(子函数)。
优化思路是可以先拆开若干小的函数,再看看哪里花的时间多。
这个属于是启动项优化,优化一下,启动更快。
参考链接
http://pkxpp.github.io/2017/03/30/gperftools%E5%AE%89%E8%A3%85/