代码之家  ›  专栏  ›  技术社区  ›  Will

Linux上的性能分析

  •  12
  • Will  · 技术社区  · 15 年前

    在*NIX上分析C/C++应用程序的最好工具是什么?

    (我希望分析一个混合了(阻塞)文件IO、网络epoll和fork()/execv()的服务器,以便进行一些繁重的工作;但也希望得到一般的帮助和更通用的工具。)

    你能把RAM、CPU、网络和磁盘的大系统图一概而论,并深入研究它吗?

    有很多关于 kernel lists 关于像这样的事情 perf timechart 但是我还没有在Ubuntu找到任何东西。

    10 回复  |  直到 10 年前
        1
  •  5
  •   Community Bayu Bramantya    7 年前

    我建议拍一组照片,其中 堆栈 是有用的。以下是更多信息:

    1. Comments on gprof .

    2. How stackshots work.

    3. A blow-by-blow example.

    4. A very short explanation.

    如果你想花钱, Zoom 看起来是个不错的工具。

        2
  •  4
  •   tshepang Arrie    11 年前

    为了提高性能,你可以试一下callgrind,一个valgrind工具。这里是一个 nice article showing it in action .

        3
  •  2
  •   Community Bayu Bramantya    7 年前

    完整系统分析工具(用于Solaris、OS X、FreeBSD)的典型示例是 DTrace . 但是它在Linux上还没有完全可用(您可以尝试 here 但是这个网站现在对我来说已经关闭了,我自己也没试过)。有许多工具,在不同的有用状态下,用于在Linux上进行完整的系统分析和内核分析。

    你可以考虑调查:

        4
  •  2
  •   David    10 年前

    Allinea MAP 是Linux上C++和其他本机语言的剖析器。它得到了我雇主的商业支持。它有一个图形界面和源代码行级别的分析和配置文件代码,几乎没有减速,这使得它非常准确的在其他子系统的时间是相关的-如IO。

    callgrind是有用的和准确的-但减速约5倍,所以我只能做较小的运行。它实际上可以计算一个函数被调用的次数,这对于理解渐近行为很有用。

        5
  •  1
  •   digitalarbeiter    15 年前

    用-pg编译,运行程序,然后使用gprof

    使用-pg编译(和链接)会将分析代码和分析库添加到可执行文件中,然后生成一个名为gmon.out的文件,其中包含计时信息。gprof显示调用图及其(绝对和相对)计时。

    man gprof 详情。

        6
  •  1
  •   sigjuice    15 年前

    oprofile 可能会引起你的兴趣。Ubuntu应该有你需要的所有软件包。

        7
  •  1
  •   Hassan Syed    15 年前

    如果您可以将应用程序带到FreeBSD、OS X或Solaris,则可以使用dtrace,尽管dtrace是一种面向分析师的工具——即,您需要驱动它——阅读:编写脚本。其他任何东西都不能提供您所需的粒度级别;dtrace不仅可以分析用户土地中函数调用的延迟,还可以跟踪上下文切换到内核中。

        8
  •  1
  •   JanePhanie    11 年前

    如接受的回答中所述, Zoom 可以做一些了不起的事情。我一直用它来理解线程行为,直到优化编译器生成的程序集。

        9
  •  0
  •   Martin Beckett    15 年前
        10
  •  0
  •   Timo Geusch    15 年前

    正如前面提到的,FOSS的答案是使用-pg构建,然后使用gprof分析输出。如果它是一个产品/项目,有理由投入一些资金,我也会尝试使用IBM/Rationals Quantify Profiler,因为这样可以更容易地查看分析数据、向下钻取到行级别或在“10000英尺”级别查看它。

    当然,可能有可用的gprof查看器可以做同样的事情,但我不知道有什么。