如何在VisualVM中显示调用树?

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

如何显示正确的呼叫树?

在此处输入图像描述

可能性

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

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

这是一个截图。 检查了Profiler“设置”框中的jvisualvm screeshot。

正如@Holger所说,探查器的/采样器的快照应该只显示正在运行的线程。 但是 ,根据个人经验,我发现采样快照有时会显示更多用于分析概要的线程。

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

我不明白为什么会发生这种情况,因为分析应该比采样更准确(参见这里的差异) ,但确实如此。

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

调用树仅显示在采样/分析期间确实运行的线程(一直没有hibernate),并且其堆栈跟踪未完全过滤掉。 在开始采样或分析之前设置filter。 启用右上角的“设置”复选框后,您可以设置filter。 对于采样器,您还可以设置采样频率,这是性能与风险之间的权衡,以监督线程的运行状态。 但可能是您的应用程序在分析期间确实处于空闲状态。 然后,您看到的唯一线程是维护与VisualVM的连接的RMI线程。