【发布时间】:2011-04-07 16:51:01
【问题描述】:
我正在借助 JVM TI 编写分析器。
在 C++ 中,我编写了一个简单的代理,它将收集到的信息写入套接字。使用 Java Swing,我构建了一个简单的 GUI,它从套接字读取这些数据以将其可视化。
但是我面临一些可用性问题。我想提供功能以根据请求开始分析 Java 应用程序。 Attach API 提供了将代理注入到 running JVM 中的可能性。
但是启动一个新的 Java 程序并注入代理有点复杂。一种方法是调用命令行并从 GUI Profiler 启动 Java 程序:
java -agentlib:agent Program
我有点不喜欢这个想法,因为它在某种程度上是hacky,但我认为没有其他方法,是吗?
总结一下,我需要两种方法来开始分析 JVM:
- 从头开始创建 Java 应用程序并直接开始对其进行分析
- 附加到正在运行的 JVM 并注入代理以开始对其进行分析
此外,我需要区分我检查的不同 JVM,但如何做到这一点?不同的 JVM 没有唯一标识符。 Attach API 提供了列出不同 JVM 及其 name 和 id 的可能性,但在第一种情况下该怎么办?是否可以使用参数注入代理?
【问题讨论】: