Gperftools交叉编译

Gperftools(Google Performance Tools)是由谷歌开发的一组性能分析工具。它包括了多个工 具,其中最为知名的是 tcmalloc(Thread-Caching Malloc)和 CPU Profiler。 相比与其他性能分析工具,gperftools有Profiling速度快,灵活性较高的优点。 主流的热点分析工具,分别是GNU gprof、Valgrind和Google perftools.

官方教程文档:Gperftools

git clone https://github.com/gperftools/gperftools.git

cd gperftools

./autogen.sh    #生成configure

./configure --with-sysroot=/opt/rockchip --build=aarch64-none-linux-gnu --host=aarch64-none-linux-gnu --prefix=/code/gperftools/install

make

​make install

tcmalloc( Windows目前仅支持 tcmalloc_minimal,如 cpu-profiler 和 leak-checker 等,还没有移植到Windows)

  • - heap-checking(`libtcmalloc`),Heap-checker是专门检测**内存泄漏**的工具,heap-checker是常用的用法是检测程序整个进程生命周期的内存泄露
  • - heap-profiling(`libtcmalloc`),Heap-profiler是**内存监控器**,可以随时知道内存的使用情况。
  • - CPU Profiler(`libprofiler`),主要是通过**采样**的方式,给出一段时间内程序实际占用cpu时间片进行统计和分析。

结果分析: 使用`pprof` 工具来分析采样数据,生成图形化的性能分析结果。

heap-profiling(堆分析)

这是我们在Google使用的堆分析器,用于探索c++程序如何管理内存

  • 计算出在任何给定时间程序堆中的内容
  • 定位内存泄漏
  • 找到占用最大内存的地方

分析系统记录所有的分配和自由。它跟踪每个分配站点的各种信息。分配位置被定义为调用malloc、calloc、realloc或new时的活动堆栈跟踪。
使用它有三个部分:将库链接到应用程序、运行代码和分析输出。

通过 -ltcmalloc 链接到库

调用接口开启/关闭内存快照:

 IsHeapProfilerRunning() //判断是否开启
 HeapProfilerStart(prefix/*前缀,文件生成路径+xxx*/) and HeapProfilerStop()//开启和关闭
//生成内存快照
 HeapProfilerDump()// 更适合于长时间的监控和离线分析,因为它将数据写入到文件中,可以保存下来供后续分析。
GetHeapProfile() //需要手动释放内存,则更适合于实时监控和集成到代码中,它可以立即处理内存分配信息,但不会自动保存数据。

如果在程序中打开堆分析,则程序将定期向文件系统写入配置文件。配置文件的顺序将被命名为:

           <prefix>.0000.heap
           <prefix>.0001.heap
           <prefix>.0002.heap

注意:每一次重启都会重新从0000开始写入文件。

控制快照的生成:

注意下面三个环境变量任何一个满足条件都会导致快照生成:

export HEAP_PROFILE_INUSE_INTERVAL=1048576000
export HEAP_PROFILE_ALLOCATION_INTERVAL=10485760000
export HEAP_PROFILE_TIME_INTERVAL=180

HEAP_PROFILE_ALLOCATION_INTERVALdefault: 1073741824 (1 Gb)每次程序分配指定字节数时转储堆分析信息。
HEAP_PROFILE_TIME_INTERVALdefault: 0每次经过指定的秒数后转储堆分析信息
HEAPPROFILESIGNALdefault: disabled当将指定的信号发送到进程时转储堆分析信息
HEAP_PROFILE_INUSE_INTERVALdefault: 104857600 (100 Mb)每当高水位内存使用标记增加指定字节数时,转储堆分析信息。
HEAP_PROFILE_MMAPdefault: false除了malloc、calloc、realloc和new之外,还配置mmap、mremap和sbrk调用注意:这会导致分析器分析内部对tcmalloc的调用,因为tcmalloc和它的朋友在内部使用mmap和sbrk进行分配。一个部分解决方案是在运行pprof时过滤掉这些分配,使用类似于pprof --ignore='DoAllocWithArena|SbrkSysAllocator::Alloc|MmapSysAllocator::Alloc
HEAP_PROFILE_ONLY_MMAPdefault: false仅配置文件mmap, mremap和sbrk调用不分析malloc、calloc、realloc、new
HEAP_PROFILE_MMAP_LOGdefault: false记录mmap/munmap调用。

pprof解析:

–text Generate text report
–callgrind Generate callgrind format to stdout
–gv Generate Postscript and display
–evince Generate PDF and display
–web Generate SVG and display
–list= Generate source listing of matching routines
–disasm= Generate disassembly of matching routines
–symbols Print demangled symbol names found at given addresses
–dot Generate DOT file to stdout
–ps Generate Postcript to stdout
–pdf Generate PDF to stdout
–svg Generate SVG to stdout
–gif Generate GIF to stdout
–raw Generate symbolized pprof data (useful with remote fetch)

这就是所有可支持的格式。

注:如果pprof 运行出错,请检查时候已经正确安装,如果出现sh: dot: command not found 这个错误,就是需要安装yum install graphviz -y

我们也可以专门focus在一些包含某些关键字的路径上,也可以忽略相关的路径

–focus

–ignore

例子:
pprof --pdf --focus=CData /test/testProg /tmp/test.log.0001.heap

pprof --gv gfs_master /tmp/profile.0100.heap

pprof --base=/tmp/profile.0004.heap gfs_master /tmp/profile.0100.heap

//解析结果输出到文件,通过--lib_prefix指定符号路径
../pprof   --pdf --lib_prefix /opt/symbol --base prefix.0002.heap /opt/symbol/IntelligentAnalysisServer   prefix.0641.heap > graph.pdf
% pprof --text gfs_master /tmp/profile.0100.heap
   255.6  24.7%  24.7%    255.6  24.7% GFS_MasterChunk::AddServer
   184.6  17.8%  42.5%    298.8  28.8% GFS_MasterChunkTable::Create
   176.2  17.0%  59.5%    729.9  70.5% GFS_MasterChunkTable::UpdateState
   169.8  16.4%  75.9%    169.8  16.4% PendingClone::PendingClone
    76.3   7.4%  83.3%     76.3   7.4% __default_alloc_template::_S_chunk_alloc
    49.5   4.8%  88.0%     49.5   4.8% hashtable::resize

第一列包含以MB为单位的直接内存使用。
第四列包含过程及其所有调用方使用的内存。
第二列和第五列只是第一列和第四列中数字的百分比表示。
第三列是第二列的累加和(即,第三列中的第k项是第二列中的前k项的和)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

You can do more

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值