2013-09-01 75 views
15

使用VisualVM分析应用程序的CPU时间时,可以在拍摄快照后看到“调用树”选项卡。但在我的情况下,调用树只显示一些RMI TCP类和方法,但没有我的应用程序的单一类。如何在VisualVM中显示调用树?

如何显示正确的呼叫树?

enter image description here

回答

9

可能性

  1. 设置不包括你的类的探查。更改Profiler设置中的排除项。
  2. 您的应用程序在分析器运行时处于空闲状态。连接分析器,然后让程序执行你想要分析的代码。
  3. 您可能正在分析错误的JVM。 RMI使得调用另一个JVM变得非常容易。也许你需要分析RMI连接的另一端。

“探查器”选项卡上有一个“设置”复选框。如果您选中设置框,将显示另一个面板,您可以配置探查器收集数据的相关类。

下面是截图。 screeshot of jvisualvm with Profiler "Settings" box checked.

+0

感谢您的设置提示。如果我点击复选框,我会看到配置文件类,但我不允许更改它们。文本框不可编辑。我如何编辑它们? –

+0

好的,明白了。必须停止分析以编辑设置。设置正确的类后,我可以看到我的应用程序的正确调用树。 –

0

调用树只显示线程采样/分析其间真正跑(不睡觉所有的时间),其堆栈跟踪的不是那些过滤掉全部。在开始采样或分析之前设置过滤器。当启用右上角的“设置”复选框时,您可以设置过滤器。在采样器的情况下,您还可以设置采样频率,这是性能与风险之间的折衷,以监控线程的运行状态。但可能是在分析过程中,您的应用程序真的很空闲。然后,您看到的唯一线程是维护与VisualVM的连接的RMI线程。

2

正如@Holger所说,剖析器/采样器的快照应该只显示正在运行的线程。 但是,我个人的经验发现,采样快照有时会显示更多线程来描述性能分析。

此外,VisualVM的采样器使您能够实时查看每个线程的CPU时间(无需拍摄快照),无论它是否正在运行,休眠,等待或监视。

我不明白为什么会发生这种情况,因为分析应该比采样(see here the difference)更准确,但它确实如此。

总而言之,我建议您尝试一下采样器,看看它是否有效。

+0

谢谢。是的,抽样帮助和抽样我可以看到我想看到的呼叫树。 –