gperftools
来源:互联网 发布:oracle java 证书 编辑:程序博客网 时间:2024/05/16 03:49
gperftools是Google提供的一套工具,其中的一个功能是CPU profiler,用于分析程序性能,找到程序的性能瓶颈。
安装
gperftools:http://code.google.com/p/gperftools/downloads/list
libunwind:http://download.savannah.gnu.org/releases/libunwind/
64位操作系统需要安装libunwind,官方推荐版本是libunwind-0.99-beta
安装过程:./configure [--disable-shared] && make && make install
Graphviz是一个由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形,gperftools依靠此工具生成图形分析结果。
安装命令:yum install graphviz
用法
1.目标程序中引入头文件<google/profiler.h>,链接libprofiler库,64位操作系统同时链接libunwind库,在需要分析代码的起点和终点调用ProfilerStart()函数和ProfilerStop()函数
2.编译链接,运行程序
分析输出
pprof脚本用于分析profile文件并输出结果,包括文本和图形两种输出风格。
例如:demo是目标程序,my.prof是profile文件
生成文本风格结果:pprof --text ./demo my.prof > profile.txt
生成图形风格结果:pprof --pdf ./demo my.prof > profile.pdf
对于一个函数的CPU使用时间分析,分为两个部分:
1.整个函数消耗的CPU时间,包括函数内部其他函数调用所消耗的CPU时间
2.不包含内部其他函数调用所消耗的CPU时间(内联函数除外)
关于文本风格输出结果
序号说明1分析样本数量(不包含其他函数调用)2分析样本百分比(不包含其他函数调用)3目前为止的分析样本百分比(不包含其他函数调用)4分析样本数量(包含其他函数调用)5分析样本百分比(包含其他函数调用)6函数名
关于图形风格输出结果
1.节点
每个节点代表一个函数,节点数据格式:
Class NameMethod Namelocal (percentage)of cumulative (percentage)
local时间是函数直接执行的指令所消耗的CPU时间(包括内联函数);性能分析通过抽样方法完成,默认是1秒100个样本,一个样本是10毫秒,即时间单位是10毫秒;
cumulative时间是local时间与其他函数调用的总和;
如果cumulative时间与local时间相同,则不打印cumulative时间项。
2.有向边
调用者指向被调用者,有向边上的时间表示被调用者所消耗的CPU时间
示例
代码如下,可以看出,CPU消耗集中在func1()和func2()两个函数,func2()消耗时间约为func1()的两倍。
#include <google/profiler.h>#include <iostream>using namespace std;void func1() { int i = 0; while (i < 100000) { ++i; } }void func2() { int i = 0; while (i < 200000) { ++i; } }void func3() { for (int i = 0; i < 1000; ++i) { func1(); func2(); } }int main(){ ProfilerStart("my.prof"); // 指定所生成的profile文件名 func3(); ProfilerStop(); // 结束profiling return 0;}
然后编译链接运行,使用pprof生成分析结果
g++ -o demo demo.cpp -lprofiler -lunwindpprof --text ./demo my.prof > output.txtpprof --pdf ./demo my.prof > output.pdf
查看分析结果,程序是122个时间样本,其中,func1()是40个时间样本,约为400毫秒;func2()是82个时间样本,约为820毫秒。
Total: 122 samples
82 67.2% 67.2% 82 67.2% func2
40 32.8% 100.0% 40 32.8% func1
0 0.0% 100.0% 122 100.0% __libc_start_main
0 0.0% 100.0% 122 100.0% _start
0 0.0% 100.0% 122 100.0% func3
0 0.0% 100.0% 122 100.0% main
- gperftools
- gperftools
- gperftools使用
- 关于gperftools
- 关于gperftools
- gperftools + qcachegrind
- gperftools使用说明
- gperftools使用
- 关于gperftools
- gperftools使用方法和常见问题
- gperftools -- heapcheck 使用
- 性能工具gperftools使用说明
- gperftools 移植到arm
- gperftools heap check使用
- gperftools的pprof安装
- gperftools编译与使用
- gperftools工具的使用
- gperftools的使用
- echarts修改图元大小无效的解决方案
- 基于HMM的中文分词模型实现
- Linux进程间通信 —— 信号灯
- 解决NDK版本过低不能自动编译JNI的问题
- 二叉树顺序结构的基本实现(实验5.1)
- gperftools
- 简单说 JavaScript中的事件委托(下)
- Nginx的安装配置
- oracle中的sql%rowcount,sql%found、sql%notfound、sql%rowcount和sql%isopen
- WordPress版微信小程序2.6版发布
- Unity不点击按钮执行按钮点击事件
- 2018年java进阶需要关注的公众号
- R语言:变量名称和字符串的转换
- 插入排序之之简单插入排序和希尔排序