我刚刚安装了 Java 1.6_07,因此我可以尝试使用 VisualVM 进行分析。它告诉我,我的应用程序花费了 60% 的时间 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run

我怎样才能知道它在那段时间做了什么?它花了多少时间等待调用它,或者做其他事情?什么在召唤它,它在召唤什么?我似乎找不到任何方法可以像 Quantify 或 Perl 分析器那样深入到更深的层次。

有帮助吗?

解决方案

我没有使用 VisualVM 的经验,但有 JRockit 分析器的经验 提供此信息;您可以考虑使用它。

更新: 可以找到带有 java profiler 列表的问题 这里, ,供具有足够代表的用户查看已删除的问题。

其他提示

您的应用程序是否使用基于 TCP 的 RMI?如果不是,这是否可能是由虚拟机检测引起的 heisenbug?我假设 VisualVM 必须使用 RMI 调用来弄清楚 JVM 中发生了什么......

我已经开始使用 新的 VisualVM 1.2. 。它允许分析 CPU 并使用调用图进行深入分析。试试看。

使用 1.3.2 也看到这是我遇到的报告的挂起。在 1.3.2 中,如果您执行线程转储并查找此调用,您可以看到它在该线程的调用链中的位置。不确定 Yuval F 指的是这个还是其他什么。向上查找调用链以查看它正在调用什么,等等,向下查找以查看它正在被什么调用等等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top