zoukankan      html  css  js  c++  java
  • (转载)gprof使用介绍 (gcc pg)

    (转载)http://blog.csdn.net/unbutun/article/details/6609498

    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命令了。

  • 相关阅读:
    KafkaZookeeper1-整体介绍
    spark thrift server configuration
    Spark Streaming 总结
    SparkSession
    Spark SQL
    Kafka Consumer2
    Kafka Consumer1
    Storm Spout
    java Future && Guava Future
    基本命令
  • 原文地址:https://www.cnblogs.com/Robotke1/p/3072888.html
Copyright © 2011-2022 走看看