【问题标题】:webkit profilerwebkit 分析器
【发布时间】:2010-09-25 19:09:19
【问题描述】:

什么是“self”和“total”列? “总计”列加起来不是 100%(高得多),看起来就像 self 一样。我怀疑 self 是非累积的,而 total 是。因此,如果 methodA 调用 methodB 调用 methodC,则在 self Id 中单独查看每个方法调用的百分比,而在 total methodA 将显示所有三个方法的总和,methodB 将显示 2,依此类推。

这是正确的吗?

【问题讨论】:

    标签: javascript debugging webkit profiling sproutcore


    【解决方案1】:

    假设你有这个程序:

    main() 调用 A() 调用 B() 调用 C(),C 循环挂起 10 秒。 CPU 分析器会这样说:

    total time: 10 sec
    routine   self%  inclusive%
       main      0         100
       A         0         100
       B         0         100
       C       100         100
    

    C 的自我时间是 10 秒,100%。其他人的自我时间基本上为零。

    他们每个人的总(包括)时间将是 10 秒或 100%。你不用把它们加起来。

    另一方面,假设 C 用 10 秒时间进行 I/O。 然后 CPU-only profiler 会这样说:

    total time: 0 sec
    routine   self%  inclusive%
       main      ?           ?
       A         ?           ?
       B         ?           ?
       C         ?           ?
    

    因为它使用的唯一实际 CPU 时间非常短,基本上没有样本命中它,所以要获得百分比,它除以零。

    OTOH,如果样本在挂钟时间,您将获得第一个输出。

    一种更好的分析器是在挂钟时间对调用堆栈进行采样,并告诉您包含时间占总时间的百分比,并在代码行级别将其提供给您,而不仅仅是函数。这很有用,因为它可以直接衡量如果该行执行得更少,可以节省多少,而且几乎没有任何问题可以隐藏。此类分析器的示例是ZoomLTProf,我被告知 OProfile 可以做到。 a simple method 适用于任何语言,并且只需要一个调试器。

    Here's a discussion of the issues.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2018-12-25
      • 2022-08-03
      • 2014-10-07
      • 2023-03-25
      • 2010-11-23
      • 1970-01-01
      相关资源
      最近更新 更多