• gperftools 使用经验总结


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

    按照 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,可以拿过来验证一把。

  • 相关阅读:
    第六次作业--结对编程第二次
    OneZero第四周第三次站立会议(2016.4.13)
    结对编程体会2
    OneZero第四周第二次站立会议(2016.4.12)
    关于“单元测试工具”
    OneZero第四周第一次站立会议(2016.4.11)
    OneZero第四周——预完成功能点统计
    OneZero第三周第五次站立会议(2016.4.8)
    OneZero第三周第四次站立会议(2016.4.7)
    OneZero第三周第三次站立会议(2016.4.6)
  • 原文地址:https://www.cnblogs.com/tangxiaosheng/p/7602086.html
Copyright © 2020-2023  润新知