先看了网上的一些资料,但都不太适合我。还是看了详细的资料才学会怎么用。

按照 http://www.cnblogs.com/persistentsnail/p/3294843.html,yum安装gperftools-devel 和 libunwind

安装gperftools-devel的时候,同时就安装了 gperftools。如何使用,主要参考了 https://wiki.geany.org/howtos/profiling/gperftools,才入的门,回头再看第一个链接,很多地方就能看懂了。

对第二个链接,我的libprofile.so是装到/usr/lib64下的,必须要执行:
LD_PRELOAD=/usr/lib64/libprofiler.so CPUPROFILE=/tmp/geany.prof geany, 忽略 LD_PRELOAD是不行的。(有的参考资料不需要这个,这有待将来验证)
看分析结果:

pprof --web /usr/bin/geany /tmp/geany.prof

里面同时提到可以不从一开始就做性能分析,

LD_PRELOAD=/usr/lib64/libprofiler.so CPUPROFILE=/tmp/geany.prof CPUPROFILESIGNAL=12 geany

想要做分析的时候,发送信号: killall -12 geany

想停止分析,同样发信号: killall -12 geany

最后看分析结果: pprof --web /usr/local/bin/geany /tmp/geany.prof.0

注意最后有个0。

本来带打算对自己的模块:加入 http://blog.csdn.net/zougangx/article/details/8836749 提到的方法,对特定的程序块做分析,因为要尽快提交一版,先搁置这个实践。但是把其中的关键内容拷贝在下面:

2.设置要分析的程序块

    –1)使用ProfilerStart("CPUProfile"),ProfilerStop() (需要包含头文件google/profiler.h)
    –2)如果不设定程序块,需要设置环境变量CPUProfile

注:CPUProfile为生成的结果数据文件的文件名

3.编译和运行

    g++ -o test test.cpp -lprofiler

./test

4.将运行结果CPUProfile转化成pdf格式的文件

    pprof –pdf ./test CPUProfile > test.pdf

二.使用过程中可能出现的问题:

1.运行时出现:No nodes to print

程序逻辑使用CPU次数太少,无法分析

2.程序core dump

循环次数过多(原因不确定)

3.运行进出现:SIGPROF handler is already in use

使用了其它的性能分析工具如:gprof等,造成冲突

总结一下,最全,也比较有价值的文档是 http://www.cnblogs.com/lenolix/archive/2010/12/13/1904868.html, 但它不太适合初学者。

可以通过功能扩展可以实现在运行中间阶段或通过http协议远程控制profiler信息的功能。gperftools-httpd项目就已经初步完成了这个功能,我们可以体验一下。

从http://code.google.com/p/gperftools-httpd/下载gperftools-httpd安装。

说是可以编译,但实际从google根本下不到这个,只能从github上下载,虽然有多个gperftools-httpd,点击后发现,都是同一家公司放上去的。编译时,说 -lstacktrace失败。到gperftools源码中看,对.o链接,让其生成libstacktrace.so,提示错误。于是,对gperftools编译过程做记录, make|tee make.out,然后分析make.out和Makefile.am,对stacktrace.so涉及到的3个文件,分别单独编译。

g++ -DHAVE_CONFIG_H -I. -I./src -I./src -DNO_TCMALLOC_SAMPLES -pthread -DNDEBUG -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc -fno-builtin-calloc -fno-builtin-cfree -fno-builtin-memalign -fno-builtin-posix_memalign -fno-builtin-valloc -fno-builtin-pvalloc -DNO_FRAME_POINTER -g -O2 -MD -MP -c src/base/vdso_support.cc  -fPIC -o ../vdso_support.o

..., 把3个.o移到某个目录中<dir> 最后,g++ <dir>.o -shared -o libstacktrace.so

为了编译不出问题,还需要对gperftools-httpd.h做修改,加上extern "C" ...

extern "C" {
extern void ghttpd(void);
}

同时介绍的Intel公司的vtune,带图形界面,很好用,不过需要license。

一些例子程序可以不用自己编了,http://bitjoy.net/2017/02/07/gperftools-tutorial/提到的git上的代码 https://github.com/01joy/TestGperftools,可以拿过来验证一把。

gperftools 使用经验总结的更多相关文章

  1. Google performance Tools (gperftools) 使用心得

    Google performance Tools (gperftools) 使用心得 gperftools是google开发的一款非常实用的工具集,主要包括:性能优异的malloc free内存分配器 ...

  2. MyEclipse10--的使用经验

    MyEclipse10--的使用经验总结 ------------------ 1.MyEclipse中的验证validation----->>用MyEclipse做ExtJs项目研发的时 ...

  3. XCode的个人使用经验

    Xcode是强大的IDE(但个人觉得不如Visual Studio做得好),其强大功能无需本人再赘述,本文也不是一篇“快捷键列表”,因为XCode上的快捷键极其多,而且还有不少是需要同时按下四个按键的 ...

  4. Flask-admin使用经验技巧总结

    笔者是看狗书入门的flask,狗书上对于flask-admin这个扩展并没有进行讲解,最近因为项目需要,学习使用flask-admin,瞬间体会到了flask开发的快速.扩展的强大 Flask-adm ...

  5. Unity3D使用经验总结 缺点篇

    不论是从官方手册,还是各种第三方教程,几乎涉及到的,都是讲如何使用U3D,以及U3D的优点. 虽然我是用的一个让步语气,但请不要否认U3D的这些优点,它们的确存在. 但对于一个引擎的特性来说,优点与缺 ...

  6. Unity3D使用经验总结 优点篇

    09年还在和其它小伙伴开发引擎的时候,Unity3D就初露头角. 当时就对这种基于组件式的设计结构很不理解. 觉得拆分过于细致,同时影响效率. 而时至今日,UNITY3D已经成为了众多团队的首选3D引 ...

  7. 控件使用经验-MVP模式+控件封装

    项目背景 几年前参与了一个面向学校的人事管理软件的开发,基于WinForm平台.今天主要想谈一谈其中关于控件的使用经验.这个项目我们大量使用了第三方控件.由于这个产品的生命周期很长,我们在设计时要考虑 ...

  8. 走进异步世界-犯傻也值得分享:ConfigureAwait(false)使用经验分享

    在上周解决“博客程序异步化改造之后遭遇的性能问题”的过程中,我们干了一件自以为很有成就感的事——在表现层(MVC与WebForms)将所有使用await的地方都加上了ConfigureAwait(fa ...

  9. Fastreport使用经验(转)在Delphi程序中访问报表对象

    Fastreport使用经验(转) 在Delphi程序中访问报表对象 最基本的方法就是frxReport1.FindObject. 然后把返回的对象强制转换成它的类型,当然,在报表中必须真的有这么个东 ...

随机推荐

  1. ifnull与nvl

    mysql 用 ifnull ,oracle没有ifnull 但是有相应的替换函数  nvl NVL(eExpression1, eExpression2)

  2. db2 reorg table failed处理

    概要: 当对一个表的结构进行改变后,需要reorg表,重新组织其目录统计信息,为数据库的访问计划提供信息,以便高效执行对其的操作. 对表作reorg操作,发生错误,通过db2 "? sql0 ...

  3. acm入门练习心得

    A题  两数相加等于n相乘等于m 问是否存在两数 写了超级久没有写出来,因为我的思路是 把m的因子都找出来,加加看,看等不等于n.后来发现m的因子还要考虑负数的情况,还要考虑m是不是负数的情况.太过麻 ...

  4. 蚂蚁金服研发的金融级分布式中间件SOFA背后的故事

    导读:GIAC大会期间,蚂蚁金服杨冰,黄挺等讲师面向华南技术社区做了<数字金融时代的云原生架构转型路径>和<从传统服务化走向Service Mesh>等演讲,就此机会,高可用架 ...

  5. AD 16 下绘图的几个技巧

    1.绘制封装如果引脚过多怎么办,使用阵列粘贴功能 首先建立一个焊盘,然后选中,使用 ctrl + c 复制,注意复制确认的时候,鼠标一定要点击到焊盘中间. 选择阵列粘贴 条款就是你要复制多少个,增量就 ...

  6. [No0000187]可能是把Java内存区域讲的最清楚的一篇文章

    写在前面(常见面试题) 基本问题: 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针 ...

  7. AndrewNG Deep learning课程笔记 - RNN

    The Unreasonable Effectiveness of Recurrent Neural Networks,http://karpathy.github.io/2015/05/21/rnn ...

  8. 状压dp的另一种形式

    做的那么多都是一些比较怎么说呢,都是在数网格一类的题目之中,这些题目有些有点固定的套路,而一些需要状态压缩的题目呢,则么是真正对状态转移的考验. 这道题呢,被彻底打脸了,以后一定要任性一点一道题做不出 ...

  9. 关于字符串的简单dp

    看这道题题目叫做魔族密码多新奇的名字点开是道字符串的dp,思考然后想出lis其实但字符串之间的比对只有循环然后其实循环爆不了,太懒点开了题解发现有人使用stl——cstring的函数了方便多了,借鉴一 ...

  10. day3_字符串常用方法

    s.upper()s.lower()s.capitalize()s.split(',')s.strip('abc')s.lstrip()s.rstrip()s.replace('old','new') ...