我刚刚安装了 Java 1.6_07,所以我可以尝试使用 VisualVM 进行分析。它告诉我我的应用程序花费了 60% 的时间sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run
我如何知道它在那段时间做了什么?它有多少时间在等待调用它或做其他事情?什么叫它,它叫什么?我似乎找不到任何方法可以像 Quantify 或 Perl 分析器那样深入到更深层次。
我没有使用 VisualVM 的经验——但是 JRockit 的分析器确实提供了这些信息;您可以考虑改用它。
更新:可以在此处找到带有 java 分析器列表的问题,供有足够代表的用户查看已删除的问题。
您的应用程序是否使用基于 TCP 的 RMI?如果不是,这是否可能是由检测 VM 引起的 heisenbug?我假设 VisualVM 必须使用 RMI 调用来弄清楚 JVM 中发生了什么......
我已经开始使用新的 VisualVM 1.2 了。它允许分析 CPU 并使用调用图向下钻取。试试看。
使用 1.3.2 也看到这是我遇到的报告挂断。在 1.3.2 中,如果您执行线程转储并查找此调用,您可以看到它在该线程的调用链中的位置。不确定 Yuval F 是指这个还是别的什么。查找调用链以查看它正在调用什么等等,向下查看它正在调用什么等等。