【问题标题】:Drilling down in VisualVM在 VisualVM 中向下钻取
【发布时间】:2008-09-12 12:57:55
【问题描述】:

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

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

【问题讨论】:

    标签: java visualvm


    【解决方案1】:

    我没有使用 VisualVM 的经验——但 JRockit 的分析器确实提供了这些信息;你可以考虑改用它。

    更新:可以在here 找到一个包含 java 分析器列表的问题,供有足够代表的用户查看已删除的问题。

    【讨论】:

    • 实际上,我最终使用了 jprofiler 的 10 天评估。而且由于我无法说服我的老板花掉这 500 美元,所以下次我需要进行任何分析时,我会烧毁很多虚假的电子邮件地址。
    • JRockit 的分析器,我上次使用它,有一个零成本的开发/非生产使用许可证,每次 JVM 调用最多允许使用 30 分钟;也许这可能更合适。
    • JRockit Mission Controls 新许可证没有这样的时间限制。它可免费用于开发和评估。
    【解决方案2】:

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

    【讨论】:

    • 我认为也是这样,我的应用程序根本不使用任何 RMI,并且正在生成大量用于 ObjectOutputStream 的 Object[] 实例。
    【解决方案3】:

    我已经开始使用the new VisualVM 1.2。它允许分析 CPU 并使用调用图向下钻取。试试看。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多