2017-03-03 21 views
0

jmapコマンドを使用すると、変数とその状態を表示できます。同様に、JVMで実行されているバイトコードを保存するためのオープンソースツールもありますか?私たちはソースコードを持っていますが、AOPの助けを借りて、変更された時があります。また、実行時に異なるバージョンのコードが存在する可能性があります。たとえば、2つのバージョンのjarファイルを持つクラスパスなどがあります。Java実行プロセス:任意プロセスの実行時にバイトコードを表示

私のシステム上のプロセスにアタッチし、 JVMはファイルへのバイトコードを含み、さらに検査のために、ランチャー内の何も変更することなく。したがって、プロセスが実行されているときに接続し、スナップショットとデタッチを取り出します(既存のプロダクションシステムを邪魔しないように)。

Open JDKまたはOracle JDKを使用してアプリケーションを実行できます。

+0

ような例外で失敗しますこの答えhttps://stackoverflow.com/questions/35146746/write-java-object-into-class-fileを見てください。 – SubOptimal

+0

@suboptimal thanksありがとう。私は調査します。私たちはCGLIBを使用していません。 sun.jvm.hotspot.HSDBが表示されますが、私のローカルのsudoを使って実行しても、その言い訳は読み込めません。 – tgkprog

答えて

1

次のコマンドを実行すると、これはパッケージsub.optimalからPID 12345でJVMからのすべてのクラスをダンプします(OpenJDKのでそれをテストすることができませんでした)

java -cp ${JDK_HOME}/lib/sa-jdi.jar \ 
    -Dsun.jvm.hotspot.tools.jcore.filter=sun.jvm.hotspot.tools.jcore.PackageNameFilter \ 
    -Dsun.jvm.hotspot.tools.jcore.PackageNameFilter.pkgList=sub.optimal \ 
    sun.jvm.hotspot.tools.jcore.ClassDump \ 
    12345 

OracleのJDKで動作します。クラスは現在のディレクトリsub/optimal/...にダンプされます。

注記上記の実行可能プロセスとjavaの実行可能ファイルは、同じJVMバージョンでなければなりません。それ以外の場合は

VMVersionMismatchException: Supported versions are 25.112-b15. Target VM is 25.112-b6 
関連する問題