我正在借助JVM TI编写一个分析器。
在C ++中,我编写了一个简单的代理,它将收集的信息写入套接字。使用Java Swing,我构建了一个简单的GUI,它从套接字中读取这些数据以使其可视化。
但是我面临一些可用性问题。我想提供根据请求开始分析Java应用程序的功能。 Attach API提供了将代理注入正在运行的 JVM的可能性。
但是要开始一个新的Java程序并注入代理程序会有点复杂。一种方法是,调用命令行并从GUI Profiler启动Java程序:
java -agentlib:agent Program
我有点不喜欢这个想法,因为它不知何故 hacky 但是我没有别的办法,是吗?
总结一下,我需要两种方法来开始分析JVM:
此外,我需要区分我检查的不同JVM,但是如何做到这一点?没有针对不同JVM的唯一标识符。 附加API 可以列出不同的JVM及其名称和 id ,但在第一种情况下该怎么办?是否可以使用参数?
注入代理答案 0 :(得分:2)
您还可以在Agent_OnLoad中生成自己的GUID,并将其用于记录。这样一来,如果你的一些过程有短暂的生命和其他长寿命你可以区分回收的PIDS。
答案 1 :(得分:1)
我通过使用本地进程标识(pid)和网络地址来唯一地识别JVM来解决问题。