在我的应用程序中,每当创建新资源时就会启动一个新的 JVM。我可以通过在 yourkit 中连接新启动的 JVM 来分析它。
现在我只能在 JVM 准备好之后才能连接到它,之后我可以对其进行分析,但我想在即将到来的时候分析 JVM 方法,即在 JVM 初始化时分析它的方法调用。
有什么办法可以做到这一点?
原因是,一些仅在初始化期间调用的方法会导致一些问题,并且一旦 JVM 创建并准备好,就无法分析这些方法。
谢谢
如果在“JVM 方法”下您的意思是在 JVM 初始化时调用的 Java 方法,那么您可以使用 yourkit 来执行此操作。你必须:
使用 YourKit 代理运行 JVM,从开始http://www.yourkit.com/docs/java/help/agent.jsp
从开始http://www.yourkit.com/docs/java/help/startup_options.jsp开始 CPU 分析(“跟踪”和“采样”选项)
之后,您应该在连接后在 YourKit UI 中看到“早期”调用。
您想对在启动应用程序的最初几秒钟内运行的代码进行远程调试会话。
尝试执行此操作时可能遇到的一个问题是,由于代码在一开始就运行,因此 JVM 可能会在您有机会通过 Eclipse 附加调试器并设置断点之前冲过它。
解决方案是设置您的 JVM/调试配置,以便将其设置为在启动时挂起。
设置远程调试的典型方法是在用于启动应用程序的代码中使用以下 JVM 参数,以便调试器稍后可以将自身附加到端口 8000。
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
事实上,当您在调试模式而不是正常模式下启动应用程序时,Eclipse 就是这样做的。它在启动应用程序时使用的 JVM 参数中添加了这一行。
注意suspend=n。如果设置为 y,JVM 将在启动时挂起。它将等待调试器附加到它并在继续之前释放它。
所以使用挂起标志,我们的问题就解决了。