程序性能分析工具—gprof
性能分析工具—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工具生成函数调用图
- dot使用依赖于graphviz
apt-get install graphviz
- gprof2dot.py获取
git clone https://github.com/jrfonseca/gprof2dot.git
- 生成调用函数图
gprof bch gmon.out |./gprof2dot.py -n0 -e0 |dot -Tpng -o output.png
备注:gprof2dot.py是从获取gprof2dot目录拷贝出来的,修改gprof2dot.py执行权限
chmod 777 gprof2dot.py
函数调用图如下:
五、gprof缺点
- 函数执行时间是估计值
- 不能处理内联函数
- 不适合存在大量递归调用的程序
程序性能分析工具—gprof相关推荐
- linux c++ 函数效率,Linux C++程序进行性能分析工具gprof使用入门
性能分析工具 软件的性能是软件质量的重要考察点,不论是在线服务程序还是离线程序,甚至是终端应用,性能都是用户体验的关键.这里说的性能重大的范畴来讲包括了性能和稳定性两个方面,我们在做软件测试的时候也是 ...
- 程序性能分析工具perf
简介 https://zhuanlan.zhihu.com/p/141694060 使用方法 编写test_perf.c程序如下 #include<stdio.h> #include< ...
- Golang程序性能分析(三)用pprof分析gRPC服务的性能
这是Golang程序性能分析系列文章的最后一篇,这次我们的主要内容是如何使用pprof工具对gRPC服务的程序性能进行分析.关于gRPC这个框架的文章之前已经写过不少文章了,如果你对它还不太熟悉,不知 ...
- Golang程序性能分析(二)在Echo和Gin框架中使用pprof
前言 今天继续分享使用Go官方库pprof做性能分析相关的内容,上一篇文章:Golang程序性能分析(一)pprof和go-torch中我花了很大的篇幅介绍了如何使用pprof采集Go应用程序的性能指 ...
- 程序性能分析及性能测试
这里所说的程序是指对外提供tcp/ip交互协议的服务性程序.网络程序性能分析很重要,比如随着网络请求流量越来越大,我们需要知道已部署的服务能不能满足需求.这里采用对网络服务程序进行建模的方法分析影响程 ...
- linux java火焰图_Linux程序性能分析和火焰图
Linux程序性能分析和火焰图 Linux程序的性能分析工具数量比较多,涉及到整个操作系统的方方面面,可能是开源的原因吧,相对于Windows来说丰富太多.其中应用分析性能方面Dtrace, Syst ...
- golang程序性能分析
最近在使用GraphQL编写golang程序,但GraphQL框架在golang上的实践比较少,很多性能上的资料也不够全面.考虑到线上抗压的问题,笔者决定对自己开发的服务模块进行性能压测,评估下服务的 ...
- sar 找出系统瓶颈的利器 目前Linux上最为全面的系统性能分析工具之一 直接 sar -dur 1 30 即可看内存 CPU和IO占用...
12. sar 找出系统瓶颈的利器 sar是System Activity Reporter(系统活动情况报告)的缩写.sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行 ...
- Go程序性能分析pprof
from: Go程序性能分析pprof 参考: http://blog.golang.org/profiling-go-programs http://google-perftools.goo ...
最新文章
- 【蓝桥java】递归基础之车辆进出栈
- python用什么数据库最容易_python3用什么数据库好
- android反编译出错,反编译出错信息
- Leetcode 103.二叉树的锯齿形层序遍历
- Java高并发编程:多个线程之间共享数据的方式探讨
- 在windows7上的通过composer安装yii2
- linux使用创建es用户,linux用户权限设置(安装elasticsearch7.x)
- crontab里shell脚本将top信息写入文件
- C# linq Expression left join如何使用
- java web开发学习手册_Java 人必备学习手册开发下载!
- PTA数据结构期末练习 - 单选题、判断题
- 【常见Web应用安全问题】---12、URL redirection
- TimesTen 介绍
- V5Shop网店系统更新 版本V8.30.0606 RC1
- linux 远程端口号,linux远程端口查看
- RocketMQ 实战与原理解析
- 中国移动发狠,给携转用户巨额优惠,反击中国电信
- 雷神众测开启团队竞赛模式
- 好想与你天长地久,共度岁月
- 吴军给女儿的信:乐观的人生态度,比什么都重要