使用代理和进程附加JVM分析器的区别

3

使用JVM agentlib附加JVM分析器(在我的情况下,是jprofiler)和动态附加到进程之间有什么区别?

除了静态和动态分析的优势之外,这两种方法之间还有其他显着的差异吗?

假设分析器在应用程序服务器本地运行。


1
这个信息是否有帮助:http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html命令行界面与在虚拟机启动后启动代理的区别? - Bax
2个回答

2
正如Stephen所说,Java 1.5及以下版本不支持attach模式(attach是在Java 6中引入的),因此只能通过添加-agentlib VM参数来对应用程序进行启动性能分析。对于远程性能分析的限制并不适用于JProfiler,您可以使用jpenable命令行工具来为远程进程准备性能分析。
attach模式的主要缺点是,性能分析器无法看到全部加载的类。相反,对于感兴趣的类,它必须重新插装这些类。这需要时间,并且在Java 8之前,会给PermGen带来负担,因此与启动时存在时相比,性能分析器在插装类时必须更有选择性。
例如:仅在插装了所有调用站点时才能记录数组分配的堆栈跟踪。在attach模式下,这意味着所有类都需要重新插装,这是不切实际的,因此在JProfiler中,此功能在attach模式下未启用。
attach模式存在其他一些问题,这导致其功能受到限制。

1
静态(agentlib)分析器附加的优点是:
  • 您可以分析应用程序的启动
  • 您可以分析Java 5和Java 6应用程序
  • 您可以在远程JVM中分析应用程序
动态附加的优点是,您可以在不重新启动应用程序且不更改其命令行选项(添加agentlib)的情况下对其进行分析。
参考:NetBeans IDE开发应用程序,版本8.0,第8.9节,“附加分析器”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接