我计划使用 Oracle 提供的 JVMTI API 来开发探查器。对于可视化,我想在代理代码之上实现一个 GUI(Qt 框架)。我的第一个 jvmti 代理正在编译和运行,我开始将代理集成到我的 Qt 项目中。
现在我面临如何将代理与 GUI 耦合的问题。GUI 应该在代理内部启动吗?例如在 Agent_OnLoad 函数中?
一个长期的方法是从 GUI 开始分析,尽管我无法想象如何实现这一点。
嗯..你有很多选择,最明显的是基于套接字的通信。您必须假设大多数分析用例将涉及服务器上的远程无头 JVM。在我的分析器中,您可以在与代理相同的机器上使用小型启动/停止/控制实用程序进行无头操作,数据在服务器上收集并传输到客户端进行可视化。您还可以使用代理启动远程(或本地)jvm,并通过来自完整 GUI 的套接字连接到侦听代理。通过该套接字收集到客户端。
还有新的“JVM Attach API”,它允许您将代理“插入”到已经运行的 JVM 中,因此,如果目标机器是 UNI*,那么您可以使用 GUI 中的 ssh/scp 并编写脚本进行 sCP 传输代理到服务器和 SSH 以启动附加。
所以...套接字(IP 和/或域)并将 GUI 中的代码重用于无头控制/收集客户端