题
我刚刚安装了 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 指的是这个还是其他什么。向上查找调用链以查看它正在调用什么,等等,向下查找以查看它正在被什么调用等等。
不隶属于 StackOverflow