用gprof分析程序性能
来源:互联网 发布:cloudxns dns一键优化 编辑:程序博客网 时间:2024/06/02 04:14
综述
- gprof用于分析函数调用耗时,可用之抓出最耗时的函数,以便优化程序。
- gcc链接时也一定要加-pg参数,以使程序运行结束后生成gmon.out文件,供gprof分析。
- gprof默认不支持多线程程序,默认不支持共享库程序。
- gcc -pg 编译程序
- 运行程序,程序退出时生成 gmon.out
- gprof ./prog gmon.out -b 查看输出
注意事项
- 程序如果不是从main return或exit()退出,则可能不生成gmon.out。
- 程序如果崩溃,可能不生成gmon.out。
- 测试发现在虚拟机上运行,可能不生成gmon.out。
- 一定不能捕获、忽略SIGPROF信号。man手册对SIGPROF的解释是:profiling timer expired. 如果忽略这个信号,gprof的输出则是:Each sample counts as 0.01 seconds. no time accumulated.
- 如果程序运行时间非常短,则gprof可能无效。因为受到启动、初始化、退出等函数运行时间的影响。
- 程序忽略SIGPROF信号!
原理
gcc -pg 在应用程序的每个函数中添加了名为 mcount/mcount/_mcount的函数。 应用程序每个函数执行时都会执行mcount,而mcount则会在内存中保存一张函数调用图, 通过函数调用堆栈的形式,查找子函数、父函数的地址,也保存了与函数相关的调用时间、次数等信息。
多进程
如果用gprof分析多进程程序,则可能一个进程的gmon.out覆盖另一个进程的gmon.out, 解决方法是在执行程序之前执行:export GMON_OUT_PREFIX=x.out 则之后生成的文件名就如x.out.pid,多进程的gmon.out就不会相互覆盖。
多线程
gprof无法分析多线程程序。缘故是gprof使用ITIMER_PROF定时器, 当超时时由内核向应用程序发送信号。但多线程程序只有主线程接收ITIMER_PROF。 这里有一个简单的实现方法: 对pthread_create进行包装,并以动态库的形式在程序运行前加载。 我通过上文的描述,整理了一个gprof分析多线程程序的程序,可供参考。
$ gcc -shared -fPIC gprof_helper.c -o ghelper2.so -lpthread -ldl # create ghelp2.so$ gcc test.c -lpthread$ ./a.out hello gprof # output$ LD_PRELOAD=./ghelper2.so ./a.out pthread: using profiling hooks for gprof # output hello gprof # output# no time accumulatedEach sample counts as 0.01 seconds.no time accumulated
gprof的输出表明没有时间被统计到。虽然函数调用次数是统计正确的,但没有时间(调用次数多未必就最耗时)。 gprof显示每0.01秒采样一次,如果函数执行的时间都非常短,例如低于0.01秒,则统计不到任何时间。
0 0
- 用gprof分析程序性能
- 用gprof分析性能初步
- 用gprof分析性能初步
- 用gprof分析性能初步
- gprof---Linux程序性能分析工具
- 程序性能分析工具gprof介绍
- 利用gprof对Ocaml程序性能分析
- gprof && oprofile 分析linux程序性能瓶颈
- Gprof应用程序性能分析
- Gprof性能分析工具
- 性能分析工具--- gprof
- linux 下gprof 和 oprofile 分析程序性能工具 [转]
- Linux C++程序进行性能分析工具gprof使用入门
- linux 下gprof 和 oprofile 分析程序性能工具
- linux 下gprof 和 oprofile 分析程序性能工具
- 使用gprof对程序的性能分析(集合贴)
- Linux C++程序进行性能分析工具gprof使用入门
- 使用gprof来对程序的性能分析总结
- 计算日期是该年中的第几天
- 使用WinSCP .Net Assembly访问FTP with TLS Explicit Encryption
- 虚拟机中实现Windows与Linux之间的文件传输
- Linux进程间通信方式之管道(pipe)
- 分布式系统的事务处理
- 用gprof分析程序性能
- 完善产业链,中关村园区大数据均衡发展
- 有趣的计算机工具介绍
- 想做Hadoop大数据开发,你需要学这么多:
- 每天两道oracle笔试题+第十天:1、oracle数据库的约束条件有哪些?2、表的主键和唯一约束很像,有哪些区别?
- QuickTime RTP流
- HDU 动态规划(46道题目)倾情奉献
- OpenCV内存泄露的检测
- 项目分享-限流框架的实现