欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > Gperftools交叉编译

Gperftools交叉编译

2025/2/24 15:42:32 来源:https://blog.csdn.net/qq_32640443/article/details/140068518  浏览:    关键词: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.gitcd gperftools./autogen.sh    #生成configure./configure --with-sysroot=/opt/rockchip --build=aarch64-none-linux-gnu --host=aarch64-none-linux-gnu --prefix=/code/gperftools/installmake​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

pprof解析:

 //解析结果输出到指定文件
pprof --gv gfs_master /tmp/profile.0100.heap > grap.pdf
//比对结果输出到指定文件% pprof --base=/tmp/profile.0004.heap gfs_master /tmp/profile.0100.heap > grap.pdf
% pprof --text gfs_master /tmp/profile.0100.heap255.6  24.7%  24.7%    255.6  24.7% GFS_MasterChunk::AddServer184.6  17.8%  42.5%    298.8  28.8% GFS_MasterChunkTable::Create176.2  17.0%  59.5%    729.9  70.5% GFS_MasterChunkTable::UpdateState169.8  16.4%  75.9%    169.8  16.4% PendingClone::PendingClone76.3   7.4%  83.3%     76.3   7.4% __default_alloc_template::_S_chunk_alloc49.5   4.8%  88.0%     49.5   4.8% hashtable::resize第一列包含以MB为单位的直接内存使用。
第四列包含过程及其所有调用方使用的内存。
第二列和第五列只是第一列和第四列中数字的百分比表示。
第三列是第二列的累加和(即,第三列中的第k项是第二列中的前k项的和)。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词