gperftools是Google提供的一套工具,其中的一个功能是CPU profiler,用于分析程序性能,找到程序的性能瓶颈。
安装
64位操作系统需要安装libunwind,官方推荐版本是libunwind-0.99-beta
安装过程:./configure [--disable-shared] &&make && make install
Graphviz是一个由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形,gperftools依靠此工具生成图形分析结果。
安装命令:yum install graphviz
 
1.编译libunwind库
因为使用的是X86_64的Linux系统,因此需要安装libunwind库。
安装方法很简单,常见的configure,make,make install的套路。
tarxvzf libunwind-0.99-beta.tar.gz
cd libunwind-0.99-beta
./configure
make
makeinstall
因为默认的libunwind安装在/usr/local/lib目录下,需要将这个目录添加到系统动态库缓存中。
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig
libunwind的最新版本是1.0.1,那为什么
不选择最新版本呢?google
perftools的INSTALL文件中给了说明。版本低于0.99-beta的libunwind与preftools一起工作可能不正常,但是高于
0.99-beta的版本中可能包含一些与perftools不兼容的代码(因为libunwind会调用malloc,可能会导致死锁)。
libunwind在X86_64平台上和perftools有不少问题,不过不会影响核心的tcmalloc库,但是会影响perftools中的工
具,例如cpu-profiler,heap-checker,heap-profiler。
 
2.编译google-perftools
因为我们只需要tcmalloc功能,因此不编译google-perftools中的其他工具。
tarxvzf google-perftools-1.9.1.tar.gz
cd google-perftools-1.9.1
./configure --disable-cpu-profiler --disable-heap-profiler --disable-heap-checker --enable-minimal--disable-dependency-tracking
make
makeinstall
/sbin/ldconfig
 
用法
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 Name
Method Name
local (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 -lunwind
pprof--text ./demo my.prof > output.txt
pprof--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

google开源的C++性能分析工具 - gperftools的更多相关文章

  1. 超好用的自带火焰图的 Java 性能分析工具 Async-profiler 了解一下

    如果你经常遇到 Java 线上性能问题束手无策,看着线上服务 CPU 飙升一筹莫展,发现内存不断泄露满脸茫然.别慌,这里有一款低开销.自带火焰图.让你大呼好用的 Java 性能分析工具 - async ...

  2. 11个Visual Studio代码性能分析工具

    软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...

  3. Linux性能分析工具的安装和使用

    转自:http://blog.chinaunix.net/uid-26488891-id-3118279.html Normal 0 7.8 磅 0 2 false false false EN-US ...

  4. php性能分析工具 - xhprof的安装使用

    一.前言 有用的东西还是记录下来吧,也方便以后的查询:这次记录一下xhprof的安装使用: xhprof是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低, ...

  5. OProfile 性能分析工具

    OProfile 性能分析工具 官方网站:http://oprofile.sourceforge.net/news/ oprofile.ko模块本文主要介绍Oprofile工具,适用系统的CPU性能分 ...

  6. Java 性能分析工具

    如何利用 JConsole观察分析Java程序的运行,进行排错调优 http://jiajun.iteye.com/blog/810150 如何使用JVisualVM进行性能分析 http://jia ...

  7. Android性能分析工具介绍

    1. Android系统性能调优工具介绍 http://blog.csdn.net/innost/article/details/9008691 TraceviewSystraceOprofile 2 ...

  8. breakpad是Google开源的一套跨平台工具

    windows下捕获dump之Google breakpad_client的理解   breakpad是Google开源的一套跨平台工具,用于dump的处理.很全的一套东西,我这里只简单涉及break ...

  9. Linux性能分析工具与图形化方法

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~. 作者:赵坤|腾讯魔王工作室后台开发工程师 在项目开发中,经常会遇到程序启动时间过长.CPU使用率过高等问题,这个时候需要依靠性能分析工具来 ...

随机推荐

  1. 【转】使用 NuGet 管理项目库-Phil Haack

    原文地址:https://msdn.microsoft.com/zh-cn/magazine/hh547106.aspx 无论多么努力,Microsoft 也没办法提供开发人员所需要的每一个库. 虽然 ...

  2. WIN8.1 PROBLEMS 01

    win8装好后右下角显示secureboot未正确配置桌面会显示“Windows 8.1 Secure Boot未正确配置”的水印问题: 安全启动(Secure Boot)可以阻止未授权软件的运行,提 ...

  3. 3分钟学会sessionStorage用法(h5页面返回滚动到上次浏览器位置)

    前言: 因最近移动端开发过程中遇到一个运营提出的所谓技术难点需求,对于原生APP来说轻而易举,毕竟自己的APP用户操作指哪打哪,但是H5该怎么做?H5就实现不了么?对于一个爱研究攻克这些前端棘手问题的 ...

  4. AutoCompleteTextView ArrayAdapter

    AutoCompleteTextView   继承于EditText,拥有EditText所有属性和方法 在输入框中输入我们想要输入的信息就会出现其他与其相关的提示信息 首先在activity_mai ...

  5. [Angular 2] A Simple Form in Angular 2

    When you create a Form in Angular 2, you can easily get all the values from the Form using ControlGr ...

  6. [转] gdb 查看vector, list, map 内容

    转:http://blog.chinaunix.net/uid-13982689-id-34282.html先下载gdb_stl_utils.tar.gz, extract it, and run m ...

  7. 3_Linux_文件搜索指令

    .3文件搜索命令 1)which 查找一个命令所在的路径 whereis 提供命令的帮助文件的信息 whatis 显示命令的概要信息whatis ls which提供命令的别名信息 2)find,基本 ...

  8. MM32 备份域学习(兼容STM32)

    MM32 备份域学习(兼容STM32) 内容提要 备份域工作原理 备份域特性 备份域的保护:侵入检测 备份域侵入检测 备份域电源与主要内容 备份域特性 20字节数据后备寄存器(中容量和小容量产品),或 ...

  9. C# 面向对象 , 类与对象

    一,类的字段 类的字段, 就是类里面的 数据. 二,类的方法 1 , 函数的重载 , 如何判断:  是由两个或多个同名函数组成的,但是函数要有不同的参数.或个数.(参数  是函数的输入的东西) shu ...

  10. JavaScript 浮点数运算 精度问题

    JavaScript小数在做四则运算时,精度会丢失,这会在项目中引起诸多不便,先请看下面脚本. //加减 <script type="text/javascript" lan ...