性能分析工具—gprof

一、概述

gprof 是 GNU 提供的程序时间监测工具,可以统计出各个函数的调用次数、时间、以及函数调用图。可以通过命令man gprof进来了解。

二、原理

在编译和链接程序的时候,使用-pg选项,这样gcc/g++就会在应用程序的每个函数中都加入一个名为mcount/_mcount/__mcount的函数,即用-pg编译的应用程序里的每个函数都会调用mcount函数,而mcount函数会在内存中保存一张函数调用图,并通过函数调用堆栈的形式查找子函数和父函数的地址,这张调用图也保存了所有与函数相关的调用时间、调用次数等所有信息。

三、实战操作

例子程序:下载bch.c

 vim bch.cgcc  -pg -o bch  bch.c./bchgprof  bchgprof bch gmon.out >report.txt

备注:运行bch程序正常退出,才能生成gmon.out文件

分析report.txt就可以获得程序的调用关系、函数执行时间等信息

report.txt部分信息如下:

Flat profile:Each sample counts as 0.01 seconds.no time accumulated%   cumulative   self              self     total           time   seconds   seconds    calls  Ts/call  Ts/call  name    0.00      0.00     0.00   173777     0.00     0.00  mod_s0.00      0.00     0.00   157080     0.00     0.00  gf_mul0.00      0.00     0.00    32287     0.00     0.00  a_log0.00      0.00     0.00    16149     0.00     0.00  gf_sqr0.00      0.00     0.00    10242     0.00     0.00  fls0.00      0.00     0.00    10241     0.00     0.00  deg0.00      0.00     0.00      558     0.00     0.00  ___arch__swab320.00      0.00     0.00      140     0.00     0.00  a_pow0.00      0.00     0.00      140     0.00     0.00  modulo0.00      0.00     0.00       16     0.00     0.00  bch_alloc0.00      0.00     0.00        4     0.00     0.00  load_ecc80.00      0.00     0.00        2     0.00     0.00  display_info0.00      0.00     0.00        2     0.00     0.00  encode_bch0.00      0.00     0.00        2     0.00     0.00  encode_bch_unaligned0.00      0.00     0.00        2     0.00     0.00  store_ecc80.00      0.00     0.00        1     0.00     0.00  build_deg2_base0.00      0.00     0.00        1     0.00     0.00  build_gf_tables0.00      0.00     0.00        1     0.00     0.00  build_mod8_tables0.00      0.00     0.00        1     0.00     0.00  compute_generator_polynomial0.00      0.00     0.00        1     0.00     0.00  decode_bch0.00      0.00     0.00        1     0.00     0.00  init_bch%         the percentage of the total running time of the
time       program used by this function.

四、生成函数调用图

由于结果report.txt分析不太直观,可以借助gprof2dot.py与dot工具生成函数调用图

  1. dot使用依赖于graphviz
    apt-get install graphviz
  2. gprof2dot.py获取
    git clone https://github.com/jrfonseca/gprof2dot.git
  3. 生成调用函数图
    gprof bch gmon.out |./gprof2dot.py -n0 -e0 |dot -Tpng -o output.png

备注:gprof2dot.py是从获取gprof2dot目录拷贝出来的,修改gprof2dot.py执行权限chmod 777 gprof2dot.py

函数调用图如下:

五、gprof缺点

  1. 函数执行时间是估计值
  2. 不能处理内联函数
  3. 不适合存在大量递归调用的程序

程序性能分析工具—gprof相关推荐

  1. linux c++ 函数效率,Linux C++程序进行性能分析工具gprof使用入门

    性能分析工具 软件的性能是软件质量的重要考察点,不论是在线服务程序还是离线程序,甚至是终端应用,性能都是用户体验的关键.这里说的性能重大的范畴来讲包括了性能和稳定性两个方面,我们在做软件测试的时候也是 ...

  2. 程序性能分析工具perf

    简介 https://zhuanlan.zhihu.com/p/141694060 使用方法 编写test_perf.c程序如下 #include<stdio.h> #include< ...

  3. Golang程序性能分析(三)用pprof分析gRPC服务的性能

    这是Golang程序性能分析系列文章的最后一篇,这次我们的主要内容是如何使用pprof工具对gRPC服务的程序性能进行分析.关于gRPC这个框架的文章之前已经写过不少文章了,如果你对它还不太熟悉,不知 ...

  4. Golang程序性能分析(二)在Echo和Gin框架中使用pprof

    前言 今天继续分享使用Go官方库pprof做性能分析相关的内容,上一篇文章:Golang程序性能分析(一)pprof和go-torch中我花了很大的篇幅介绍了如何使用pprof采集Go应用程序的性能指 ...

  5. 程序性能分析及性能测试

    这里所说的程序是指对外提供tcp/ip交互协议的服务性程序.网络程序性能分析很重要,比如随着网络请求流量越来越大,我们需要知道已部署的服务能不能满足需求.这里采用对网络服务程序进行建模的方法分析影响程 ...

  6. linux java火焰图_Linux程序性能分析和火焰图

    Linux程序性能分析和火焰图 Linux程序的性能分析工具数量比较多,涉及到整个操作系统的方方面面,可能是开源的原因吧,相对于Windows来说丰富太多.其中应用分析性能方面Dtrace, Syst ...

  7. golang程序性能分析

    最近在使用GraphQL编写golang程序,但GraphQL框架在golang上的实践比较少,很多性能上的资料也不够全面.考虑到线上抗压的问题,笔者决定对自己开发的服务模块进行性能压测,评估下服务的 ...

  8. sar 找出系统瓶颈的利器 目前Linux上最为全面的系统性能分析工具之一 直接 sar -dur 1 30 即可看内存 CPU和IO占用...

    12. sar 找出系统瓶颈的利器 sar是System Activity Reporter(系统活动情况报告)的缩写.sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行 ...

  9. Go程序性能分析pprof

    from: Go程序性能分析pprof     参考: http://blog.golang.org/profiling-go-programs http://google-perftools.goo ...

最新文章

  1. 【蓝桥java】递归基础之车辆进出栈
  2. python用什么数据库最容易_python3用什么数据库好
  3. android反编译出错,反编译出错信息
  4. Leetcode 103.二叉树的锯齿形层序遍历
  5. Java高并发编程:多个线程之间共享数据的方式探讨
  6. 在windows7上的通过composer安装yii2
  7. linux使用创建es用户,linux用户权限设置(安装elasticsearch7.x)
  8. crontab里shell脚本将top信息写入文件
  9. C# linq Expression left join如何使用
  10. java web开发学习手册_Java 人必备学习手册开发下载!
  11. PTA数据结构期末练习 - 单选题、判断题
  12. 【常见Web应用安全问题】---12、URL redirection
  13. TimesTen 介绍
  14. V5Shop网店系统更新 版本V8.30.0606 RC1
  15. linux 远程端口号,linux远程端口查看
  16. RocketMQ 实战与原理解析
  17. 中国移动发狠,给携转用户巨额优惠,反击中国电信
  18. 雷神众测开启团队竞赛模式
  19. 好想与你天长地久,共度岁月
  20. 吴军给女儿的信:乐观的人生态度,比什么都重要

热门文章

  1. ORA-22858: 数据类型的变更无效
  2. mysql唯一索引的关键字,什么是mysql中唯一索引的关键字
  3. 2023年易派客工业品展圆满落幕 期待与您再次相遇
  4. CSS实现水平垂直居中
  5. 第二类斯特林数与自然数幂和
  6. State of the Mobile Web: First Quarter, 2008
  7. 如何重装Ubuntu 系统
  8. vscode关闭flake8格式检查
  9. 爬虫python和c语言区别_爬虫概述 - Python教程 - C语言网
  10. 机器学习Python编程环境搭建