使用JVMTI分析JVM,如何区分不同的JVM?

时间:2011-04-07 16:51:02

标签: java jvmti

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

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

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

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

java -agentlib:agent Program

我有点不喜欢这个想法,因为它不知何故 hacky 但是我没有别的办法,是吗?

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

  1. 从头开始Java应用程序并直接开始分析
  2. 附加到正在运行的JVM并注入代理以开始对其进行概要分析
  3. 此外,我需要区分我检查的不同JVM,但是如何做到这一点?没有针对不同JVM的唯一标识符。 附加API 可以列出不同的JVM及其名称 id ,但在第一种情况下该怎么办?是否可以使用参数

    注入代理

2 个答案:

答案 0 :(得分:2)

您还可以在Agent_OnLoad中生成自己的GUID,并将其用于记录。这样一来,如果你的一些过程有短暂的生命和其他长寿命你可以区分回收的PIDS。

答案 1 :(得分:1)

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