2

我正在借助 JVM TI 编写分析器。

在 C++ 中,我编写了一个简单的代理,它将收集到的信息写入套接字。使用 Java Swing,我构建了一个简单的 GUI,它从套接字读取这些数据以将其可视化。

但是我面临一些可用性问题。我想提供功能以根据请求开始分析 Java 应用程序。附加 API提供了将代理注入到正在运行的JVM 中的可能性。

但是要启动一个新的 Java 程序并注入代理就有点复杂了。一种方法是调用命令行并从 GUI Profiler 启动 Java 程序:

java -agentlib:agent Program

我有点不喜欢这个想法,因为它有点老套,但我看不到其他方法,是吗?

总结一下,我需要两种方法来开始分析 JVM:

  1. 从头开始一个 Java 应用程序并直接开始分析它
  2. 附加到正在运行的 JVM 并注入代理以开始对其进行分析

此外,我需要区分我检查的不同 JVM,但如何做到这一点?不同的 JVM 没有唯一标识符。Attach API提供了列出不同 JVM 及其名称id的可能性,但在第一种情况下该怎么办?是否可以使用参数注入代理?

4

2 回答 2

2

您还可以在 Agent_OnLoad 中生成自己的 GUID 并将其用于日志记录。这样,如果您的某些进程的生命周期较短而其他进程的生命周期较长,则您可以区分回收的 PIDS。

于 2013-10-28T00:09:24.113 回答
1

我通过使用本地进程标识 (pid) 和网络地址来唯一标识 JVM 解决了这个问题。

于 2011-08-01T19:42:56.623 回答