【问题标题】:How to debug JVM resources loading?如何调试JVM资源加载?
【发布时间】:2010-10-19 13:04:12
【问题描述】:

要在 JVM 中调试类加载,我们可以使用参数-verbose:class,但是...有人知道如何调试资源加载(例如属性文件)吗?

【问题讨论】:

    标签: java debugging jvm profiling classloader


    【解决方案1】:

    我想您需要考虑使用分析器。或者使用仪器接口的东西。

    不确定它有多稳定,但有 BTrace,它是一种 Java 版本的 DTrace。

    BTrace 是用于 Java 平台的安全、动态跟踪工具。 BTrace 可用于动态跟踪正在运行的 Java 程序。 BTrace 动态检测目标应用程序的类以注入跟踪代码(“字节码跟踪”)。跟踪代码用 Java 编程语言表示。

    如果您在开发机器上执行此操作,并且事件(正在加载的资源)的数量不是太频繁,您也可以在调试器中设置一个断点。

    【讨论】:

    • @FastSnail:他们似乎搬到了 Github。链接已更新。
    【解决方案2】:

    资源以URLs 的形式提供。所以,我想用“纯”Java 来做:安装一个自定义的ClassLoader,将URLs 复制到一个带有自定义URLStreamHandler 的版本中。将您的监控代码放入流处理程序中并转发到原始代码。

    【讨论】:

      【解决方案3】:

      您可以使用InTrace 来检测执行加载的 Classloader 类。

      对于 Sun JVM,我建议使用以下包含模式来跟踪适当的类:

      • 类加载器
      • URLClassPath
      • 加载器

      【讨论】:

        【解决方案4】:

        在Linux环境下你可以试试:

        lsof -p <jvm pid>
        

        它会给你一个列表,其中包含与指定 pid 关联的程序使用的描述符。

        More Info

        【讨论】:

        • 问题是一个jar文件可以加载很多资源,可能只能打开一次。
        • 我同意,在这种情况下,我认为最好的选择是使用 ClassLoader 解决方案
        【解决方案5】:

        有几种技术可以调试类加载问题。以下是 JRebel 创建者 总结这些技术的精彩幻灯片:Do you really get class loaders?

        【讨论】:

          猜你喜欢
          • 2020-08-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多