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