当满足某些运行时条件时,我试图有选择地监视/分析 Java 应用程序。我已经能够使用HotSpotDiagnosticMXBean即时转储堆,这非常有用。
我现在正在尝试对 CPU 分析做类似的事情,希望更有效地针对特定的代码路径。我对命令行HPROF 界面和 NetBeans 分析器有一些经验,但两者都需要事先启动。
有没有办法从正在运行的应用程序中以编程方式激活 HPROF 分析器?最好是可以让我随意启动和停止分析过程的东西?
当满足某些运行时条件时,我试图有选择地监视/分析 Java 应用程序。我已经能够使用HotSpotDiagnosticMXBean即时转储堆,这非常有用。
我现在正在尝试对 CPU 分析做类似的事情,希望更有效地针对特定的代码路径。我对命令行HPROF 界面和 NetBeans 分析器有一些经验,但两者都需要事先启动。
有没有办法从正在运行的应用程序中以编程方式激活 HPROF 分析器?最好是可以让我随意启动和停止分析过程的东西?
根据JVMTI 文档,像 hprof 这样的本地代理库必须在 JVM 初始化期间很早就加载,在执行任何字节码之前。所以不,不可能即时执行此操作。
另一种方法是在 main 函数中使用修改后的 JVM 参数重新启动 java 进程,尽管这并非微不足道。