質問
Oracleが提供するJVMTI APIを使用して、プロファイラーを開発する予定です。視覚化のために、エージェントコードの上にGUI(QTフレームワーク)を実装したいと思います。私の最初のJVMTIエージェントはAREADYコンパイルとランニングであり、エージェントをQTプロジェクトに統合し始めました。
今、私はエージェントをGUIと結合する方法の問題に直面しています。 GUIはエージェント内で起動する必要がありますか?たとえば、agent_onload関数の場合は?
長期的には、GUIからプロファイリングを開始することですが、それを実現する方法を想像することはできません。
解決
まあ..あなたは最も明白なものがソケットベースの通信です。プロファイリングユースケースの大部分には、サーバー上のリモートヘッドレスJVMが含まれると仮定する必要があります。私のプロファイラーでは、エージェントと同じマシン上の小さな開始/ストップ/コントロールユーティリティでヘッドレスを操作できます。データはサーバーで収集され、視覚化のためにクライアントに転送されます。また、エージェントを使用してリモート(またはローカル)JVMを起動し、完全なGUIからソケットを越えてリスニングエージェントに接続することもできます。そのソケットをクライアントに収集します。
また、新しい「JVMアタッチAPI」もあります。これにより、エージェントを既に実行中のJVMに「挿入」することができます。したがって、ターゲットマシンがUNI*の場合、GUIからSSH/SCPを使用し、スクリプトを使用してSCP転送をスクリプト化できます。サーバーとSSHのエージェントは、添付を開始します。
だから...ソケット(IPおよび/またはドメイン)とヘッドレスコントロール/コレクションクライアントのGUIからそのコードを再利用