5

アプリケーションの CPU プロファイリングに VisualVM を使用すると、エラーが発生します。

「Profiler Agent エラー: メッセージ付き: エラー 66 で再定義に失敗しました」.

その上で、すべてのクラス ファイルをビルド パスからアプリケーションを起動した場所にコピーします。

私はそれに関するいくつかの情報を見つけようとしました.エラーコードの意味(JVMTIのドキュメントによると):

JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED (66)
直接のスーパークラスが新しいクラス バージョンと異なるか、直接実装されたインターフェイスのセットが異なります。

プロファイリングは通常、私の環境 (Java ビルド 1.7.0_09-b05、Fedora 17 64 ビット) で機能します。Visualvm-docs に記載されているように、「-Xshare:off」を試しましたが、何の効果もありませんでした。

これは私がこの問題を経験している唯一の Java-SE アプリケーションであるため、私が使用しているライブラリに何らかの形で関連しているようです。以下は私のクラスパスにあります:

  • Log4j 1.2.17
  • アパッチ OpenJPA 2.2.1
  • コモンズ構成 1.9
  • コモンズ プール 1.6
  • Postgresql 9.1-901jdbc4
  • imgscar-lib-4.2

ライブラリとエラーの相関関係を確認できる人はいますか? 私は本当にもうアイデアがありません。

4

2 に答える 2

5

これはJPAが原因のようです。Samplerの代わりに使用できますProfiler。もう 1 つの可能性は、JPA によって計測されたクラスが VisualVM によってプロファイリングされないように、ルート メソッドと計測フィルターを定義することです。プロファイリングの詳細、およびプロファイリング ルートとインストルメンテーション フィルタの設定方法については、「VisualVM を使用したプロファイリング、パート 1 」および「VisualVM を使用したプロファイリング、パート 2 」を参照してください。

于 2012-12-28T09:47:14.310 に答える
0

ちょっとした追加: OpenJPA を使用するアプリケーションのプロファイリング時に、同じエラー メッセージが表示されました。アプリケーションをシャットダウンしない限り、各エラー ダイアログで [OK] をクリックするだけでエラーが消えるようです。

ボタンを押すだけで、収集した結果をリセットし、コードを再度実行できます。たとえば、ループで実行しnew Scanner(System.in).nextLine()、UI のボタン クリックを使用または使用します。

于 2015-04-22T09:00:10.203 に答える