linux下应用程序性能剖分神器gprofiler-tools-安装和使用
最近在摆弄算法的的优化,需要剖分一下算法的瓶颈,就找了一些代码剖分工具,其中
gprofileer-tools是很不错的工具,gperftools时google开源的一款C++性能分析分析工具,github项目地址如下:
https://github.com/gperftools/gperftools
一 下载和安装:
1.git clone:
git clone https://github.com/gperftools/gperftools
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
linux下应用程序性能剖分神器gprofiler-tools-安装和使用的更多相关文章
- VMware,win7与linux centos6.4文件互传,linux下挂载windows共享文件夹,vmware tools安装方法
本方法是以win7,VMware9.0.1 ,centos6.4为基础实验的. 对于linux的初级使用阶段,都会Windows中使用linux虚拟机VMWare或者其它的.在Windows与linu ...
- linux下关于程序性能和系统性能的工具、方法
观察性能/状态的方法:top free netstat /pro/目录下的信息 其中/pro/meminfo下的信息相当丰富 ------------------------------------- ...
- linux下c程序调用reboot函数实现直接重启【转】
转自:http://www.blog.chinaunix.net/uid-20564848-id-73878.html linux下c程序调用reboot函数实现直接重启 当然你也可以直接调用syst ...
- Linux下C程序的编辑,编译和运行以及调试
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- 位图文件(BMP)格式以及Linux下C程序实现(转)
源:位图文件(BMP)格式以及Linux下C程序实现 说到图片,位图(Bitmap)当然是最简单的,它是Windows显示图片的基本格式,其文件扩展名为*.BMP.由于没有经过任何的压缩,故BMP图 ...
- Linux下C程序内存泄露检测
在linux下些C语言程序,最大的问题就是没有一个好的编程IDE,当然想kdevelop等工具都相当的强大,但我还是习惯使用kdevelop工具,由于没有一个习惯的编程IDE,内存检测也就成了在lin ...
- Linux下C程序的内存映像
2.Linux下C程序的内存映像 2.1. 代码段.只读数据段(1)对应着程序中的代码(函数),代码段在Linux中又叫文本段(.text)(2)只读数据段就是在程序运行期间只能读不能写的数据,con ...
- 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 ...
- Linux下的暴力密码在线破解工具Hydra安装及其组件安装-使用
Linux下的暴力密码在线破解工具Hydra安装及其组件安装-使用 hydra可以破解: http://www.thc.org/thc-hydra,可支持AFP, Cisco AAA, Cisco a ...
随机推荐
- HTML 5 视频/音频
HTML5 Audio/Video 方法 方法 描述 addTextTrack() 向音频/视频添加新的文本轨道 canPlayType() 检测浏览器是否能播放指定的音频/视频类型 load() 重 ...
- nginx-web身份验证
1.配置文件设置: server { listen 80; server_name www.longshuai.com www1.longshuai.com; location / { root /w ...
- 663. Equal Tree Partition 能否把树均分为求和相等的两半
[抄题]: Given a binary tree with n nodes, your task is to check if it's possible to partition the tree ...
- RFC
一.简介 二.常用 1)TLSv1.2 Protocol https://tools.ietf.org/html/rfc5246
- python 数据库操作类
#安装PyMySQL:pip3 install PyMySQL #!/usr/bin/python3 #coding=utf-8 #数据库操作类 from datetime i ...
- 利用python如何实现团队成员动态抓阄?
解决思路: 1 确定团队成员个数num,然后根据成员个数生成元素非重复的数组: 2 构成一个团队成员字典,键:成员名 值:0, 然后将生成的数组分别赋值给字典键对应的值: 话不多说,看代码便知: # ...
- iOS 拨打电话三种方式
,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示 NSMutableString * str=[[NSMutableString alloc] initWithFo ...
- python页面解析_beautifulsoup试玩
最近玩爬虫,先把python解析器 beautifulsoup 练练 这个 tainiu.html 是从百度网盘里拷贝一段html from bs4 importBeautifulSoup wit ...
- Android Studio 内置SDK在 unity中使用
1 AndroidStudio 安装好后更新SDK Platforms 2 在 File -> Other Settings -> Default Project Structure 中可 ...
- Spring 的配置详解
Bean元素 Spring创建对象的方式 (1)空参构造方式 (2)静态工厂(了解) (3)实例工厂方式 Bean元素进阶 (1)scope属性 a.singleton (2)生命周期属性 Sprin ...