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

基于Linux时间样本的分析器

  •  12
  • deft_code  · 技术社区  · 16 年前

    有适合Linux的基于时间的采样分析器吗?

    我通常使用 OProfile

    popen c++过滤到 abi::__cxa_demangle

    有没有一种方法可以配置OProfile来标记 波本 呼叫由于配置文件数据现在存在,OProfile认为瓶颈是堆和 std::string 调用(BTW曾经优化过的调用将运行时缩短到不到一秒,比x2快多了)。

    以下是我的OProfile配置:

    $ sudo opcontrol --status
    Daemon not running
    Event 0: CPU_CLK_UNHALTED:90000:0:1:1
    Separate options: library
    vmlinux file: none
    Image filter: /path/to/executable
    Call-graph depth: 7
    Buffer size: 65536
    

    是否有其他针对Linux的探查器可以找到瓶颈?

    波本 call)OProfile只会将其示例放在阻塞的调用上。

    如果我不能解决这个问题,OProfile只有在可执行文件的CPU接近100%时才有用。对于具有低效阻塞调用的可执行文件来说,这是无济于事的。

    5 回复  |  直到 9 年前
        1
  •  6
  •   Community Mohan Dere    9 年前

    很高兴你这么问。我相信OProfile可以做我认为正确的事情,那就是在壁炉钟上取堆栈样本。 当程序运行缓慢时 而且,如果它不允许您检查单个堆栈样本,则至少对样本上显示的每行代码进行汇总,即该行显示的样本百分比。那是一个 直接的 如果那条线不在的话能省下多少钱。 Here's one discussion. Here's another, another . 正如保罗所说,Zoom应该这么做。

    如果时间从60秒变为1秒,这意味着每一个堆栈样本都有59/60的概率向您显示问题。

        2
  •  3
  •   Paul R    16 年前

    尝试 Zoom

        3
  •  2
  •   Joel Dice    12 年前

    我很久以前写过这个,只是因为找不到更好的: https://github.com/dicej/profile

    我也找到了这个,虽然我没试过: https://github.com/oliver/ptrace-sampler

        4
  •  1
  •   Vi.    15 年前

    很快入侵了linux的琐碎采样探查器: http://vi-server.org/vi/simple_sampling_profiler.html

    它附加了 backtrace(3) 在…上归档 SIGUSR1 ,然后将其转换为带注释的源。

        5
  •  1
  •   Jason Rohrer    7 年前

    在尝试了这里的所有建议之后(除了现在已经失效的Zoom,它仍然是dropbox中的一个大文件),我发现没有什么能像Dunlavey先生建议的那样。上面列出的一些答案中的“快速黑客”不适合我,或者也不适合我。整天都在尝试。。。在一个简单的测试程序中,没有任何东西可以将fseek作为热点,而这个测试程序是I/O绑定的。

    https://github.com/jasonrohrer/wallClockProfiler

    它自动化了Dunlavey先生建议的手动过程,周期性地用GDB中断目标进程并获取堆栈跟踪,然后在最后打印一份关于哪些堆栈跟踪最常见的报告。这些是你真正的挂钟热点。而且它确实有效。

    推荐文章