使用 VisualVM 分析应用程序的 CPU 时间时,可以在拍摄快照后看到“调用树”选项卡。但就我而言,调用树只显示了一些 RMI TCP 类和方法,但没有显示我的应用程序的单个类。
如何显示正确的调用树?
可能性
Profiler 选项卡上有一个“设置”复选框。如果您选中“设置”框,将显示另一个面板,让您可以配置探查器收集哪些类的数据。
这是一个屏幕截图。
正如@Holger 所说,分析器/采样器的快照应该只显示正在运行的线程。但是,根据个人经验,我发现采样快照有时会显示更多线程而不是分析线程。
此外,VisualVM 的采样器使您能够实时查看每个线程的 CPU 时间(无需拍摄快照),无论它是在运行、睡眠、等待还是监控。
我不明白为什么会发生这种情况,因为分析应该比采样更准确(见这里的区别),但确实如此。
总而言之,我建议您尝试采样器,看看它是否有效。
调用树仅显示在采样/分析期间真正运行的线程(并非一直处于休眠状态)并且其堆栈跟踪未被完全过滤掉。在开始采样或分析之前设置过滤器。启用右上角的“设置”复选框时,您可以设置过滤器。对于采样器,您还可以设置采样频率,这是性能和监督线程运行状态的风险之间的权衡。但可能是您的应用程序在分析期间确实处于空闲状态。然后,您看到的唯一线程是维护与 VisualVM 的连接的 RMI 线程。