(转载)gprof使用介绍 (gcc -pg)
2013-05-11 16:53
239 查看
linux服务端编程,性能总是不可避免要思考的问题。
而单机(严格的说是单核)单线程程序(严格的说是逻辑)又是所有复杂应用的基础。所以,这块的性能是整个应用的基础。
当遇到应用相应很慢的时候我们往往会疑问:这么强劲的CPU到底在干什么,反应这么慢。
满足你!linux下常用的性能工具就是跟gcc一起的gprof。来个例子程序:
#include <stdio.h> #include <stdlib.h> void f1() { int i; int* p; for (i = 0; i < 10; i++) { p = malloc(sizeof(int)); *p = 10; free(p); } } void f2() { int i; int* p; for (i = 0; i < 20; i++) { p = malloc(sizeof(int)); *p = 10; free(p); } } void f3() { int i; int* p; for (i = 0; i < 30; i++) { p = malloc(sizeof(int)); *p = 10; free(p); } } int main(int argc, char** argv) { int i; for (i = 0; i < 1000000; i++) { f1(); f2(); f3(); } return 0; }
要启用gprof很简单,gcc编译的时候带上-pg参数即可;
编译好了之后运行可执行文件,会产生gmon.out文件。
这就是gprof的日志,里面记录了程序运行cpu的使用信息。打开看看?杯具,二进制文件,我们人类看不懂。。。我们要运行下面的命令生成报表:
gprof a.out gmon.txt > report.txt
这个过程执行如下图:
打开report.txt,我们可以看到两张表。
第一张:
这就是每个函数占用cpu的时间以及百分比了。我们可以很明显的看到f1()、f2()和f3()所用的时间关系。很准确。
第二张:函数调用表,描述了函数调用的相互关系
仔细看吧。
下面介绍个更给力的工具来生成报表(其实是图)——gprof2dot:http://code.google.com/p/jrfonseca/wiki/Gprof2Dot。
首先下载gprof2dot.py,http://code.google.com/p/jrfonseca/wiki/Gprof2Dot有这个工具。
然后下载graphviz工具
apt-get install python graphviz
安装完成这些工具之后,执行如下的命令:
(1)gprof2dot.py命令将报report.txt转化为xxx.dot文件(graphviz http://www.graphviz.org/图像文件格式)。
(2)dot命令将这个文件xxx.dot再转为png格式。
好吧现在用图像软件打开吧:
不用解释了吧。调用次数/本身所花cpu时间/调用的函数所花时间 一目了然!
由于Ubuntu没有安装gprof这个命令,apt-get install gprof*就可以安装gprof命令了。
相关文章推荐
- gcc -pg 选项的使用. gprof使用介绍.
- gprof使用介绍 (gcc -pg) [转]
- [转载]stressapptest使用介绍
- 【转载】Android IntentService使用全面介绍及源码解析
- 转载:Motorola S-records格式介绍 (MIPS gcc 输出的文件格式)
- 转载一个简单的lua展示【COCOS2DX-LUA 脚本开发之一】LUA语言基础在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!
- gprof使用介绍
- [转载] Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍
- 转载:Motorola S-records格式介绍 (MIPS gcc 输出的文件格式)
- gprof使用介绍
- gprof的使用介绍
- gcc编译器的介绍及使用基础
- 【转载】Java中如何写一段内存泄露的程序 & ThreadLocal 介绍和使用
- [转载]前端构建工具gulpjs的使用介绍及技巧
- 【转载】iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用
- Aspose.Words组件介绍及使用—基本介绍与DOM概述 (转载)
- (转载)Linux:Ldd命令介绍及使用方法
- gprof使用介绍【转】
- 转载:AWR介绍使用
- 123、 android Retrofit 介绍和使用(转载)