Linux系统-耗时检测-gprof操作入门
来源:互联网 发布:怎么样做淘宝生意 编辑:程序博客网 时间:2024/06/05 19:10
序言
一定时间的输入的程序处理延时,现需测量程序中各个函数的耗时比例,找到性能瓶颈,使用gprof工具检测。
1. gprof的功能
gprof和oprofile对比
gprof:
GNU工具之一,默认linux系统中都带有这个工具
原理:编译时在每个函数的出入口加入profiling代码,运行时统计程序在用户态的执行信息,得到每个函数的调用次数,执行时间,调用关系等信息。
适用领域:
- gprof简单易懂,适合于查找用户级程序的瓶颈
- 对很多时间在内核态执行的程序,gprof不适合
oprofile:
开源的profiling工具,2.6内核以上支持SMP系统带有
原理:使用硬件调试寄存器来统计信息,进行profiling的开销比较小,而且可以对内核进行profiling。统计的信息包括:cache的缺失率,memory的访存信息,分支预测错误率等,这些信息gprof是得不到的,但是oprofile不能得到函数调用次数。
适用领域:oprofile稍显复杂,但是得到的信息更多,更适合调试系统软件
2. gprof的使用
此处只介绍gprof的使用,oprofile的使用可参考官方站点:http://oprofile.sourceforge.net/about/
gprof的使用流程:
编译链接时加上-pg选项。一般我们可以加在 makefile中,如果需要得到带注释的源码清单,需要加-g选项
运行可执行程序(程序正常退出会在运行目录下生成gmon.out文件)
gprof工具分析gmon.out文件
gprof分析命令:
gprof -b:不再显示每个字段的详细描述
-p:只显示函数的调用图 call graph
-q:只显示函数的时间消耗列表
-e Name:不再显示函数Name及其子函数的调用图
- 可以添加多个-e标志,一个-e标志只能指定一个函数
-E Name:不再显示函数Name及其子函数的调用图
- 此标志类似于-e标志,但它在总时间和百分比时间的计算中排除了由函数Name及其子函数的耗时
-f Name:显示函数Name及其子函数的调用图
- 可以指定多个-f标志,一个-f标志只能指定一个函数
-F Name:显示函数Name及其子函数的调用图
- 类似于-f标志,一个-F标志只能指定一个函数,可以指定多个-F标志
- 但在总时间和百分比时间计算中仅使用所打印的例程的时间
- -F标志覆盖-E标志
-z:显示使用次数为零的例程
- 按照调用计数和累积时间计算
3. gprof的检测示例
添加-pg和-g选项
gcc -g -pg -o test test.c
或
gcc -o test test.c -pg -g
运行可执行程序再分析gmon.out文件
./test
gprof test gmon.out -b
- 需要把它和产生它的应用程序关联起来
- 使用不同命令查看不同选项
或统一执行分析
gprof -b ./test gmon.out
使用不同命令查看不同选项
执行后的一个例子:gprof test gmon.out -b
Acknowledgements:
http://www.cnblogs.com/StitchSun/articles/4286428.html
http://blog.csdn.net/garfier/article/details/12489953
http://blog.csdn.net/stanjiang2010/article/details/5655143
2017.08.04
- Linux系统-耗时检测-gprof操作入门
- Linux系统-内存检测-valgrind操作入门
- UI系统中的耗时操作处理
- Linux C++程序进行性能分析工具gprof使用入门
- Linux C++程序进行性能分析工具gprof使用入门
- 程序性能调优之 怎样使用gprof和oprofile来分析 linux程序的性能(每个函数的调用次数与耗时)
- 程序性能调优之 怎样使用gprof和oprofile来分析 linux程序的性能(每个函数的调用次数与耗时)
- (转)程序性能调优之 怎样使用gprof和oprofile来分析 linux程序的性能(每个函数的调用次数与耗时)
- Linux系统性能检测
- Linux系统性能检测
- Linux系统性能检测
- linux系统检测
- Linux系统性能检测
- 耗时操作方案总结
- Java操作耗时表
- BroadcastReceiver处理耗时操作
- UI与耗时操作
- Volley执行耗时操作
- Builder 模式
- IOS 编译后代码修改mainBundle的文件的可行性
- iOS探索--iOS初探知识点总结
- lambd表达式reduce的应用
- NSIS学习笔记(以Qt4程序打包为例)
- Linux系统-耗时检测-gprof操作入门
- windows生成git ssh密钥
- LeetCode 447 Number of Boomerangs
- 2017第三次多校联合HDU6059
- Android Activity 生命周期中onStart()和onResume()的区别
- easyui-tree根据叶子节点获取父节点值(N层)
- gulp常用插件和工具
- 纯干货|最经典的STM32-M3概述!
- PhantomJS简介