【问题标题】:Why don't the CPU times in VisualVM add up?为什么 VisualVM 中的 CPU 时间不加起来?
【发布时间】:2012-08-21 19:57:30
【问题描述】:

我正在 VisualVM 中进行 CPU 分析并查看调用树中的结果。

我有一些方法,总共花费了 X 时间,花费在方法本身(自身时间)以及从该方法调用的子例程中。

当我将子程序花费的时间加上 Self 时间时,为什么结果不等于方法花费的总时间?请注意,我不是在谈论毫秒,而是在余额中缺少 50% 或几分钟。

【问题讨论】:

  • 也许应用程序空闲了一段时间?也许有些时间花在了 VisualVM 无​​法解释的本机代码方法上?这真的很重要吗?
  • 是的,如果我无法解释我的代码所花费的 50% 的时间,这很重要 ;-)。您确定“本机代码”时间吗?你有任何关于文档的指针吗?
  • 不,我不确定,我没有任何指示/证据。这就是为什么我说“也许”。关于 50% 点,我不相信你的老板会认为这很重要……如果代码运行得足够快。

标签: java profiling visualvm


【解决方案1】:

除了调用树很浅的小程序外,很难使用“自学时间”来学习任何有意义的东西。

纯 CPU 时间在任何类型的复杂程序中也不是很有用,它们很容易将大部分时间花在隐藏 I/O 上。

最好看看

  • 包括时间,而不是自我时间
  • 挂钟,不是 CPU 时间
  • 百分比,而不是绝对秒数或毫秒数

获得行级分辨率会更好,而不仅仅是函数或方法。

Here's the method 我用来找出为什么要花费时间以及如何改进它,以及 here's an example 已经做了什么。 Here's a more extensive 讨论问题。

【讨论】:

    【解决方案2】:

    您需要总时间和固有(自身)时间...您还应该避免调用树,而是从命名空间层次结构的角度(包、类、方法,甚至动​​态标签和标记)查看时钟计时

    这是一系列文章,详细介绍了彻底的性能调查是什么样的,尤其是在处理超过 +2000 的巨大堆栈深度和在很短的时间内进行十亿次方法调用时:

    http://www.jinspired.com/solutions/case-studies/scala-compiler

    请注意,每种方法都旨在验证所使用的其他方法的结果...更重要的是,没有单一的正确性能模型...有许多正确的性能模型取决于所询问的内容和可以更改的内容。 ..我所知道的唯一一个糟糕的性能模型是在这种情况下基于样本的模型,尽管当您无事可做并且匆忙时,任何一点信息都会有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多