最近在摆弄算法的的优化,需要剖分一下算法的瓶颈,就找了一些代码剖分工具,其中

gprofileer-tools是很不错的工具,gperftools时google开源的一款C++性能分析分析工具,github项目地址如下:

   https://github.com/gperftools/gperftools

  一 下载和安装:

  1.git clone:

2 . 安装:

   根目录下执行:sh autogen.sh

 然后执行:./configure

最后:make all && sudo make install

安装成功。

   如果没有安装libunwind会出现如,configure执行后报警告:   

configure: WARNING: No frame pointers and no libunwind. Using experimental backtrace capturing via libgcc. Expect crashy cpu profiler.

   解决方法:

使用命令apt-get install libunwind8-dev安装libunwind即可。

  3 最后使用ldconfig更新一下库文件即可。

  二 使用和实例:

  1 使用gprofiler-tools需要在的代码中添加如下几段代码:

   A头文件:

    #include <gperftools/profiler.h>

   B 起止函数:

    修改程序的源代码使得要profiler的代码段包含在ProfilerStart("name");ProfilerStop();

   C链接文件添加需要链接的宏:

    lprofiler //cpu性能

    -ltcmalloc  //heap资源

  2 实例:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <gperftools/profiler.h>
#include <unistd.h> void consumeSomeCPUTime1(int input){
int i = ;
input++;
while(i++ < ){
i--; i++; i--; i++;
}
}; void consumeSomeCPUTime2(int input){
input++;
consumeSomeCPUTime1(input);
int i = ;
while(i++ < ){
i--; i++; i--; i++;
}
}; int stupidComputing(int a, int b){
int i = ;
while( i++ < ){
consumeSomeCPUTime1(i);
}
int j = ;
while(j++ < ){
consumeSomeCPUTime2(j);
}
return a+b;
}; int smartComputing(int a, int b){
return a+b;
}; int main()
{
int i = ;
printf("reached the start point of performance bottle neck\n");
sleep();
ProfilerStart("CPUProfile");
while( i++ < ){
printf("Stupid computing return : %d\n",stupidComputing(i, i+));
printf("Smart computing return %d\n",smartComputing(i+, i+));
}
printf("should teminate profiling now.\n");
ProfilerStop();
sleep(); return ;
}

  编译运行:

gcc -g test.c -o prog -lprofiler

  

export CPUPROFILE=info.prof

  执行:

pprof -text prog info.prof

  结果:

Using local file prog.
Using local file info.prof.
Total: samples
75.4% 75.4% 75.4% consumeSomeCPUTime1
24.6% 100.0% 50.0% consumeSomeCPUTime2
0.0% 100.0% 100.0% __libc_start_main
0.0% 100.0% 100.0% _start
0.0% 100.0% 100.0% main
0.0% 100.0% 100.0% stupidComputing

 

报错一:

Google perftool cannot read file “libprofiler.so.0”

解决方法:

sudo /sbin/ldconfig

错误二:

Using local file prog.
Use of uninitialized value $host in substitution (s///) at /usr/local/bin/pprof line 3366.
Use of uninitialized value $hostport in concatenation (.) or string at /usr/local/bin/pprof line 3368.
Use of uninitialized value $prefix in concatenation (.) or string at /usr/local/bin/pprof line 3368.
Use of uninitialized value $host in substitution (s///) at /usr/local/bin/pprof line 3366.

解决方法:

env CPUPROFILE=/tmp/mybin.prof /home/gprofiler-tools/prog

参考资料:

1 https://www.kancloud.cn/subin/blog/619133

2 https://github.com/gperftools/gperftools

3 https://stackoverflow.com/questions/1581494/google-perftool-cannot-read-file-libprofiler-so-0

4    https://www.ibm.com/developerworks/cn/linux/l-cn-googleperf/index.html

5   https://stackoverflow.com/questions/24086867/cant-analyse-the-output-the-profile-file-of-gperftools-profiler

linux下应用程序性能剖分神器gprofiler-tools-安装和使用的更多相关文章

  1. VMware,win7与linux centos6.4文件互传,linux下挂载windows共享文件夹,vmware tools安装方法

    本方法是以win7,VMware9.0.1 ,centos6.4为基础实验的. 对于linux的初级使用阶段,都会Windows中使用linux虚拟机VMWare或者其它的.在Windows与linu ...

  2. linux下关于程序性能和系统性能的工具、方法

    观察性能/状态的方法:top free netstat /pro/目录下的信息 其中/pro/meminfo下的信息相当丰富 ------------------------------------- ...

  3. linux下c程序调用reboot函数实现直接重启【转】

    转自:http://www.blog.chinaunix.net/uid-20564848-id-73878.html linux下c程序调用reboot函数实现直接重启 当然你也可以直接调用syst ...

  4. Linux下C程序的编辑,编译和运行以及调试

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  5. 位图文件(BMP)格式以及Linux下C程序实现(转)

    源:位图文件(BMP)格式以及Linux下C程序实现 说到图片,位图(Bitmap)当然是最简单的,它是Windows显示图片的基本格式,其文件扩展名为*.BMP.由于没有经过任何的压缩,故BMP图 ...

  6. Linux下C程序内存泄露检测

    在linux下些C语言程序,最大的问题就是没有一个好的编程IDE,当然想kdevelop等工具都相当的强大,但我还是习惯使用kdevelop工具,由于没有一个习惯的编程IDE,内存检测也就成了在lin ...

  7. Linux下C程序的内存映像

    2.Linux下C程序的内存映像 2.1. 代码段.只读数据段(1)对应着程序中的代码(函数),代码段在Linux中又叫文本段(.text)(2)只读数据段就是在程序运行期间只能读不能写的数据,con ...

  8. Red Gate系列之五 .NET Reflector 7.6.1.824 Edition .NET程序反编译神器(附插件安装教程2012-10-13更新) 完全破解+使用教程

    原文:Red Gate系列之五 .NET Reflector 7.6.1.824 Edition .NET程序反编译神器(附插件安装教程2012-10-13更新) 完全破解+使用教程 Red Gate ...

  9. Linux下的暴力密码在线破解工具Hydra安装及其组件安装-使用

    Linux下的暴力密码在线破解工具Hydra安装及其组件安装-使用 hydra可以破解: http://www.thc.org/thc-hydra,可支持AFP, Cisco AAA, Cisco a ...

随机推荐

  1. Unity shader 官网文档全方位学习(一)

    转载:https://my.oschina.net/u/138823/blog/181131 摘要: 这篇文章主要介绍Surface Shaders基础及Examples详尽解析 What?? Sha ...

  2. python 内置元祖子类

    a = (zhangsan,20,nv,123@163.com) 输出姓名 a[0] 输出年龄 a[1] 输出性别 a[2] ..... 这样写可读性非常低 使用 内置元祖子类 from collec ...

  3. Oracle 基本语法、触发器、视图

    参考文章:https://www.cnblogs.com/linjiqin/category/349944.html 数据库分类 1.小型数据库:access.foxbase 2.中型数据库:inor ...

  4. Win7上安装scapy

    1.环境 操作环境:win7 python版本:python3.5 依赖模块:Npcap(推荐)或WinPcap 下载scapy 2.安装步骤 操作环境,python及依赖模块安装省略(一直点击下一步 ...

  5. Curator场景应用

    分布式锁功能: 在分布式场景中,我们为了保证数据的一致性,经常在程序运行的某一个点,需要进行同步操作,(java提供synchronized或者Reentrantlock实现), 使用curator基 ...

  6. python中sys.path--学习

    本着下定义开头吧:python中import某个A模块时,首先会从python的内置模块中查找是否含义该模块的定义若未查询到会从sys.path对应的模块路径查询是否含有对应模块的定义,如果搜索完成依 ...

  7. Java15-java语法基础(十五)——内部类

    java16-java语法基础(十五)内部类 一.内部类: 可以在一个类的内部定义另一个类,这种类称为内部类. 二.内部类分为两种类型: 1.静态内部类: 静态内部类是一个具有static修饰词的类, ...

  8. 解决find命令报错: paths must precede expression(转)

    原文地址:https://www.cnblogs.com/peter1994/p/7297656.html 在一天早上,想在服务器 /tmp 目录清除一些pdf文件,大概一万多个文件,在执行命令的时候 ...

  9. Django之Form、ModelForm 组件

    Django之Form.ModelForm 组件 一.Form组件: django框架提供了一个form类,来处理web开发中的表单相关事项.众所周知,form最常做的是对用户输入的内容进行验证,为此 ...

  10. RNA-seq差异表达基因分析之TopHat篇

    RNA-seq差异表达基因分析之TopHat篇 发表于2012 年 10 月 23 日 TopHat是基于Bowtie的将RNA-Seq数据mapping到参考基因组上,从而鉴定可变剪切(exon-e ...