【问题标题】:Profiling JVMs with JVMTI, how to distinguish the different JVMs?用 JVMTI 分析 JVM,如何区分不同的 JVM?
【发布时间】: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:

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

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

【问题讨论】:

    标签: java jvmti


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-18
        • 1970-01-01
        • 1970-01-01
        • 2017-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-20
        相关资源
        最近更新 更多