13

この 4 時間は、リモートで (つまり、Eclipse ではなく) 実行する必要がある Tomcat インスタンスで Eclipse TPTP メモリ プロファイリングをセットアップするのに費やしました。TPTP および Agent Controller のドキュメントによると、これは可能なはずです。

Web サイトの指示に従って、エージェント コントローラーと共に TPTP コンポーネント (4.6.0) を Eclipse (Galileo) ワークベンチにインストールしました。エージェントを有効にするために、Tomcat インスタンスを起動するコマンド ラインに次のオプションを追加しました。

-agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf:allocsites=true

次のディレクトリを PATH の先頭に追加しました。

D:\dev\tools\ac\plugins\org.eclipse.tptp.javaprofiler
D:\dev\tools\ac\bin

Tomcat を起動しようとすると、一貫して次のエラー メッセージが表示されます。

ERROR: JDWP unable to get necessary JVMTI capabilities. ["debugInit.c",L279]

私は多くのグーグルを行いましたが、関連するものは何も見つかりませんでした。TPTP とさまざまなバージョンの Agent Controller を再インストールしてみました。

最終的に、問題は、「jpda」オプションを使用してTomcatを起動していたことであることが判明しました。これは、catalina.batが変換します

-Xdebug -Xrunjdwp:transport=.....

「jpda」コマンド引数を削除すると、JVMTI が機能し始めました。

SO、質問は次のとおりです。検索中に、JVMTI エージェントがデバッグと互換性がないことを示すものは何も見つかりませんでした。誰かが何が起こっているのか、なぜ JVMTI + JDWP が有効なセットアップではないのか説明できますか?

4

3 に答える 3

21

これまでの回答はどれも正しくありません。これは、言及されたエラーをクエリした場合に Google に表示される最初のヒットであるため、明確化が必要だと感じています.

JVMTI と JDWP連携して動作しますが、実際には、通常は一緒に使用する必要があります。ERROR: JDWP unable to get necessary JVMTI capabilitiesコマンドラインでif -Xrunjdwp(and/orpossible -agentlib:jdwp) が複数回指定されている場合は取得します。これを修正するには、コマンド ラインに-Xrunjdwpまたはのいずれかのみが含まれていることを確認してください。-agentlib:jdwp

詳細については、続きをお読みください...

JVMTI (Java Virtual Machine Tool Interface) は、JVMDI (Java Virtual Machine Debug Interface) および JVMPI (Java Virtual Machine Profiling Interface) の後継です。Java 5 で廃止され、Java 6 で削除された JVMDI と JVMPI の両方の機能が組み込まれています。これは、デバッグとプロファイリングの目的で JVM の内部を公開する API です。

JDWP (Java Debug Wire Protocol) は、コマンドと応答を送信するための単純なメカニズムを記述するプロトコルです。私の知る限り、これは、JVM の外部にあるデバッガーが JVM と通信し、JVMTI とやり取りする唯一の方法です。

JDI (Java Debugger Interface) はクライアント側 (デバッガー側) の API であり、JDWP を多かれ少なかれ透過的に利用しながら、JVMTI の一部の機能を公開します。

Bob Dobbsの回答で言及されているバグは、誤解を招くエラー メッセージと、JVM がコマンド ラインで指定されるたびに JDWP をロードしようとするという事実に関係しています。JDWP と JVMTI を一緒に使用できないことはどこにも記載されていません。

詳細はこちら: https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_74/rzaha/jpdebuga.htm

于 2011-05-17T21:31:16.557 に答える
3

私はあなたと同じ問題に遭遇しましたが、問題を明らかにする JVM バグ レポート ( http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6354345 )を思いつきました。基本的には、Java エージェント ライブラリが同じ VM に 2 回読み込まれることを意図していないことに帰着します。最悪ですが、両方を同時に実行できないのは、エージェント システムの基本的な制限のようです。

于 2010-11-08T05:14:31.203 に答える
1

私にとっては、Code Bling の投稿と同じ問題でした。それらは重複していて、変数に隠されているため-Xrunjdwp、2 番目があったことに気づきませんでした。アプリケーション サーバーの起動スクリプトを確認してください。-Xrunjdwp%JAVA_OPTIONS%

于 2014-01-22T06:35:22.623 に答える