C++性能分析工具gperftools安装教程与使用案例分析

news2024/11/23 6:31:01

目录

  • 1 什么是gperftools?
  • 2 gperftools安装流程
  • 3 gperftools使用案例

1 什么是gperftools?

gperftools是Google Performance Tools的简称,是由谷歌开发的一套性能分析工具。它主要用于帮助开发人员进行性能分析和优化,使他们能够更好地了解其程序的性能瓶颈并进行有效的优化。gperftools包含了多个工具,其中最知名的是CPU ProfilerHeap ProfilerCPU Profiler可以帮助开发人员分析程序的CPU使用情况,找出可能的性能瓶颈;而Heap Profiler则用于检测程序中的内存泄漏和内存占用情况。除了这些主要工具外,gperftools还包含了一些其他有用的工具和库,如库的跟踪器、线程检查器和动态符号化工具等,都有助于开发人员更好地理解和优化其程序的性能。

在这里插入图片描述

2 gperftools安装流程

按照以下步骤安装:

  • 命令行安装依赖项
    sudo apt install autoconf automake libtool graphviz
    
    其中gperftools使用graphviz将代码性能分析结果进行图形化显示。graphviz是一个由 AT&T 实验室开发的开源工具包,用于绘制 DOT 语言脚本描述的图形
  • 源码安装依赖项
    gperftools在 64 位操作系统下需要libunwind库的支持,libunwind提供了可用于分析程序调用栈的 API
    wget https://github.com/libunwind/libunwind/releases/download/v1.6.2/libunwind-1.6.2.tar.gz
    tar -zxvf libunwind-1.6.2.tar.gz
    cd libunwind-1.6.2
    ./configure
    make -j 8
    sudo make install
    
  • 源码安装gperftools
    git clone https://github.com/gperftools/gperftools.git
    cd gperftools
    ./autogen.sh
    ./configure
    make -j 8
    sudo make install
    
    注意这里需要使用gcc-7以上的编译器,否则会报错configure: error: *** A compiler with support for C++17 language features is required.
  • 刷新动态库文件
    sudo ldconfig
    
    ldconfig可执行程序存放在/sbin目录下,通常在系统启动时运行,而当用户安装了一个新的动态链接库时,需要手动运行这个命令。运行 ldconfig会刷新动态装入程序ld.so所需的链接和缓存文件/etc/ld.so.cache(此文件保存了已排好序的动态链接库名字列表),实现动态链接库为系统所共享。
  • 测试安装
    终端输入
    pprof
    
    返回以下帮助文档说明安装成功
    Options:
       --cum               Sort by cumulative data
       --base=<base>       Subtract <base> from <profile> before display
       --interactive       Run in interactive mode (interactive "help" gives help) [default]
       --seconds=<n>       Length of time for dynamic profiles [default=30 secs]
       --add_lib=<file>    Read additional symbols and line info from the given library
       --lib_prefix=<dir>  Comma separated list of library path prefixes
       --no_strip_temp     Do not strip template arguments from function names
    
    Reporting Granularity:
       --addresses         Report at address level
       --lines             Report at source line level
       --functions         Report at function level [default]
       --files             Report at source file level
    
    Output type:
       --text              Generate text report
       --stacks            Generate stack traces similar to the heap profiler (requires --text)
       --callgrind         Generate callgrind format to stdout
       --gv                Generate Postscript and display
       --evince            Generate PDF and display
       --web               Generate SVG and display
       --list=<regexp>     Generate source listing of matching routines
       --disasm=<regexp>   Generate disassembly of matching routines
       --symbols           Print demangled symbol names found at given addresses
       --dot               Generate DOT file to stdout
       --ps                Generate Postscript 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)
       --collapsed         Generate collapsed stacks for building flame graphs
                           (see http://www.brendangregg.com/flamegraphs.html)
    

3 gperftools使用案例

使用以下的测试代码

#include <gperftools/profiler.h>
#include <stdio.h>
void func1() {
  int i = 0;
  int j = 0;
  for (i = 0; i < 1000; i++) {
    for (j = 0; j < 100000; j++) {
      ;
    }
  }
}
void func2() {
  int i = 0;
  int j = 0;
  for (i = 0; i < 200; i++) {
    for (j = 0; j < 100000; j++) {
      ;
    }
  }
}
void func3() {
  int i = 0;
  int j = 0;
  for (i = 0; i < 300; i++) {
    for (j = 0; j < 100000; j++) {
      ;
    }
  }
}
void func4() {
  func1();
  func2();
  func3();
}
int main() {
  ProfilerStart("my.prof"); // 指定所生成的profile文件名
  func4();
  ProfilerStop(); // 结束profiling
}

接着按以下步骤进行

  • 编译代码
    gcc -o demo demo.c -lprofiler -lunwind
    
    如果是CMakeLists编译,则需要链接到库
    target_link_libraries(${FileName}
    	profiler	
    )
    
  • 运行代码并生成报告
    pprof --pdf ./demo my.prof > output.pdf
    
  • 查看报告

在这里插入图片描述

可以看到性能瓶颈在func1


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1832174.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

05眼动识别软件详情2波形优化

对应视频链接点击直达 01项目点击下载&#xff0c;可直接运行&#xff08;含数据库&#xff09; 05眼动识别软件详情2 对应视频链接点击直达期望的数据展示数据波形对比如何实现几种常用滤波介绍维纳滤波巴特沃斯滤波器中值滤波排序滤波 推荐 结语其他以下是废话 原始数据的波…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] K小姐和A先生的聚餐计划(200分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

[自动驾驶 SoC]-4 特斯拉FSD

FSD, 参考资料来源FSD Chip - Tesla - WikiChip 另外可参考笔者之前分享文章&#xff1a;[自动驾驶技术]-6 Tesla自动驾驶方案之硬件&#xff08;AI Day 2021&#xff09;&#xff0c;​​​​​​​[自动驾驶技术]-8 Tesla自动驾驶方案之硬件&#xff08;AI Day 2022&#xf…

短信群发平台众多,如何挑选一家靠谱的合作伙伴?

随着通信技术的不断发展和智能手机的普及&#xff0c;短信群发平台在企业营销、客户通知、活动推广等领域的应用越来越广泛。然而&#xff0c;市场上的短信群发平台琳琅满目&#xff0c;如何从中挑选出一家靠谱、高效、安全的合作伙伴&#xff0c;成为了许多企业和个人关注的焦…

Matlab r2023a v23.2.0 解锁版安装步骤 (工程计算商业数学软件)

前言 Matlab&#xff08;矩阵实验室&#xff09;是全球领先的数学计算软件开发商美国 MathWorks 公司研发的一款面向科学与工程计算的高级语言的商业数学软件&#xff0c;集算法开发、数据分析、可视化和数值计算于一体的编程环境&#xff0c;其核心是仿真交互式矩阵计算&…

管理员如何踢掉登录用户?

这是 Spring Security 学习小组有小伙伴提的一个问题&#xff1a; 感觉这个问题还有点意思&#xff0c;拿出来和各位小伙伴一起分享下。 一 问题分析 首先大家注意限制条件&#xff1a;常规 Session 方案。 如果不是这几个字&#xff0c;这个问题根本就不是问题&#xff0c;…

Python基础用法 之 输入 与 输出

1.输入 &#xff08;1&#xff09;什么是输入&#xff1f; 输入&#xff1a;获取键盘的输入信息。 &#xff08;2&#xff09;语法 变量 input(给使⽤者的提示信息,即告诉别⼈输入什么内容) &#xff08;3&#xff09;注意事项 代码从上到下执⾏, 当代码执⾏遇到 input 的时候…

【C++高阶】掌握C++多态:探索代码的动态之美

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C继承 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀继承 &#x1f4d2;1. 多态的定义及实现&…

个人学习算法总结的基础crud与算法思想数据结构解释

建议都从简单的crud入手,结合生活理解了结构与操作在去进阶更难的东西,做事有规划有步骤有时间限制这样比较好进步 跳转阅读

进化生物学的数学原理 知识点总结

1、进化论与自然选择 1.1 进化论 1、进化论 过度繁殖 -> 生存竞争 -> 遗传和变异 -> 适者生存 2、用进废退学说与自然选择理论 用进废退&#xff1a;一步适应&#xff1a;变异 适应 自然选择&#xff1a;两步适应&#xff1a;变异 选择 适应 3、木村资生的中性…

Mysql开启查询日志(General Log)

1、增加配置&#xff1a; /etc/my.cnf [mysqld] general_log1 general_log_file/var/log/mysql/query.log 2、增加目录和文件&#xff0c;并且授权 可以使用以下命令修改权限&#xff1a; 创建目录&#xff1a;sudo mkdir -p /var/log/mysql 更改目录所有者&#xff1a;sudo…

[环境配置]vscode通过ssh连接autodl进行项目开发

警告&#xff1a;如果使用VSCode直接执行或开终端执行训练程序&#xff0c;请在调试完成后最后通过screen/tmux工具开守护进程&#xff0c;确保程序不受SSH连接中断影响程序执行&#xff01; 官方文档&#xff1a;请戳 AutoDL使用方法&#xff1a; 在进行操作前您需要提前安装…

【日常记录】【插件】prisma 链接MySQL数据库 简单入门

文章目录 1、新建项目&#xff0c;使用prisma链接数据库1.1、先创建一个项目1.2、初始化 npm 配置文件及下载依赖1.3、初始化TS配置文件1.4、初始化 prisma1.5、更改 prisma/schema.prisma1.6 更改.env 文件1.7 编写 prisma/schema.prisma1.8 将编写的 prisma/schema.prisma 映…

实时数仓Hologres V2.2发布,Serverless Computing降本20%

Highlight 新发布Serverless Computing&#xff0c;提升大任务稳定性&#xff0c;同时可降低20%计算成本 引擎性能优化&#xff0c;TPC-H 1TB测试相对V1.X 提升100% 实时湖仓加速架构升级&#xff0c;支持Paimon&#xff0c;直读ORC、Parquet数据性能提升5倍以上 新增实例监…

如何安全进行亚马逊、沃尔玛测评?

在亚马逊、沃尔玛、速卖通、阿里国际站等电商平台上&#xff0c;测评已成为一种高效的推广手段&#xff0c;但伴随的风险也不容忽视。这些风险主要源于平台严格的大数据风控机制&#xff0c;它涵盖了多个方面&#xff0c;以确保评价的真实性和合规性。 首先&#xff0c;硬件参数…

解决 uniapp h5 页面在私有企微iOS平台 间歇性调用uni api不成功问题(uni.previewImage为例)。

demo <template><view class"content"><image class"logo" src"/static/logo.png"></image><button click"previewImage">预览图片</button></view> </template><script> //打…

数据可视化实验一:Panda数据处理及matplotlib绘图初步

目录​​​​​​​ 2024-6-17 一、请将所有含有发明家“吴峰”的发明专利的“申请日”打印出来。并将含有“吴峰”的所有发明专利条目保存到Excel中 1.1 代码实现 1.2 运行结果 二、读取文件创建城市、人口、性别比、城镇化率DataFrame对象&#xff0c;计算指标排名&…

AI写代码,CS还有前途吗?加州大学伯克利分校:CDSS申请人数激增48%!

目录 01 CS入学人数暴涨 02 人类Coder可堪大任 03 AI还没有学会创新 04 编程与农耕不同 AI写了这么多代码&#xff0c;你还应该学习计算机科学吗&#xff1f; 新的数据显示&#xff0c;学生们仍然热衷于选修计算机科学&#xff1a;加州大学伯克利分校&#xff08;UCB&#…

AI大模型应用(1)OpenAi API快速入门

AI大模型应用(1)OpenAi API快速入门 2022 年 11 月&#xff0c;ChatGPT 成功面世&#xff0c;成为历史上用户增长最快的消费者应用。与 Google、FaceBook等公司不同&#xff0c;OpenAI 从初代模型 GPT-1 开始&#xff0c;始终贯彻只有解码器&#xff08;Decoder-only&#xff…

动力学笔记01——共振频率和共振带的数学定义

文章目录 0、背景描述1、正文2. 位移、速度、加速度的共振频率并不相同 0、背景描述 过去一年&#xff0c;我基本都在考虑塔架&#xff08;尤其是混塔&#xff09;频率仿真/模态分析的问题。关于这个问题&#xff0c;不仅有地基刚度&#xff0c;还有塔筒本身以及其他影响频率的…