新启动 JVM 的方法级别分析

Posted

技术标签:

【中文标题】新启动 JVM 的方法级别分析【英文标题】:Method level profiling of newly launched JVM 【发布时间】:2014-01-19 03:12:20 【问题描述】:

在我的应用程序中,每当创建新资源时就会启动一个新的 JVM。我可以通过在 yourkit 中连接新启动的 JVM 来分析它。

现在我只能在 JVM 准备好之后才能连接到它,之后我可以对其进行分析,但我想在即将到来时分析 JVM 方法,即分析 JVM 的方法调用,而它正在正在初始化。

有什么方法可以实现吗?

原因是,一些在初始化期间调用的方法会导致一些问题,一旦 JVM 创建并准备就绪,就无法对其进行分析。

谢谢

【问题讨论】:

onkarjoshi.com/blog/224/… 【参考方案1】:

如果在“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 中看到“早期”调用。

【讨论】:

【参考方案2】:

您想对在应用启动的最初几秒钟内运行的代码进行远程调试会话。

尝试执行此操作时可能会遇到的一个问题是,由于代码一开始就运行,JVM 可能会在您有机会通过 Eclipse 附加调试器并设置断点之前匆忙通过它。

解决方案是设置您的 JVM/调试配置,使其在启动时设置为挂起。

设置远程调试的典型方法是在用于启动应用程序的代码中使用以下 JVM 参数,以便调试器稍后可以将自身附加到端口 8000。

-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

事实上,当您在调试模式而不是正常模式下启动应用程序时,Eclipse 就是这样做的。它在启动应用程序时使用的 JVM 参数中添加了这一行。

注意suspend=n。如果设置为 y,JVM 将在启动时挂起。它将等待调试器附加到它并在继续之前释放它。

所以使用挂起标志,我们的问题就解决了。

来源: http://www.onkarjoshi.com/blog/224/how-to-suspend-vm-on-startup-when-remote-debugging-your-java-app/

【讨论】:

链接消失后,仅链接的答案可能没有价值。请将相关内容放入您的回答中

以上是关于新启动 JVM 的方法级别分析的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2016新特性:数据库级别配置

一:从JDK源码级别彻底剖析JVM类加载机制

JVM——深入分析对象的内存布局

JVM学习-内存管理机制

centos7新系统配置

在 JVM 级别阻止类的实例?