使用 jvm agentlib 附加 jvm 分析器(在我的例子中是它的 jprofiler)和动态附加到进程之间有什么区别?
除了静态分析与动态分析的优点之外,这两种方法之间还有其他显着差异吗?
假设分析器在应用程序服务器本地运行。
最佳答案
正如 Stephen 所说,附加模式不适用于 Java 1.5 及更低版本(附加是在 Java 6 中引入的)并且只能通过添加 -agentlib VM 参数来分析应用程序的启动。远程分析的限制不适用于 JProfiler,您可以在其中使用 jpenable
命令行工具为分析准备远程进程。
附加模式的主要缺点是探查器在加载类时看不到所有类。相反,对于感兴趣的类,它必须重新检测这些类。这需要时间,并且在 Java 8 之前它会给 PermGen 带来负担,因此与在启动时出现相比,探查器在检测类时必须更具选择性。
例如:记录数组分配的堆栈轨迹只有在检测所有调用点时才有可能。在附加模式下,这意味着所有类都需要重新检测,这是不切实际的,因此在 JProfiler 中,附加模式下未启用此功能。
还有其他几个此类问题会导致附加模式下的功能限制。
关于java - 使用代理与进程附加 jvm 分析器之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36510287/