現在、Windowsシェルで実行されているJavaプロセスがあります。
シリアル化を担当するスレッドの1つが無期限にブロックされるため、メモリに格納されている重要な情報がディスクに書き込まれなくなります。
プロセスをシャットダウンすると、情報が失われます。
プロセスをシャットダウンする前に、前述の情報をもう一度シリアル化できるように、新しいコードを記述してコンパイルし、同じメモリ空間で実行できると便利です。
プロセスはjava -jar
コマンドを使用して開始されました。
ホットスポットVM機能で、これを実現する方法はありますか?
Attach APIを使用して、仮想マシンに接続できます。使い方はこちら
次にコード例を示します。
String agentJAR = "myAgent.jar";
VirtualMachine vm = VirtualMachine.attach (processid);
vm.loadAgent(agentJAR);
ここで、agentはjarの名前です。
エージェントjarには、インストルメンテーションAPIを使用してJVMとやり取りできるエージェントが含まれています。
実行時にロードされるエージェントを作成するには、次のagentmain
ような関数を実装します。
public static void agentmain(String agentArgs, Instrumentation inst);
または
public static void agentmain(String agentArgs);
計装オブジェクトは、あなたはおそらく必要はありません、実行時にクラスを変更するために使用されます。ただし、うまくいけば、agentmainで実行する必要のあるコードを配置し、アタッチAPIを使用してターゲットJVMでそれを実行できます。
幸運を!!
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加