13

Javaアプリケーションの本番環境の問題をデバッグするためのさまざまなツールとテクニックは何でしょうか。好き、

  • スレッドダンプを取得する方法とツールは何ですか?
  • ヒープダンプを取得する方法とツールは何ですか?
  • 上記のダンプを分析するためのツールは何ですか?

(すべてLinux / Unix環境にあると仮定します)

4

7 に答える 7

7

スレッドダンプを取得する方法とツールは何ですか?

スレッドダンプの場合は、JConsole、VisualVMを使用するか、より簡単に言えば、QUITシグナルをターゲットプロセスに送信できます。

kill -QUIT <pid> 

また

kill -3 <pid>

Java 5以降、jstackプラットフォームに依存せず-m、Javaフレームとネイティブフレームの両方を印刷するための優れたオプション(混合モード)もあります。

ヒープダンプを取得する方法とツールは何ですか?

Sun VMの場合、、 jmapSun JConsole、Sun VisualVM、SAPJVMMon。IBM VMの場合は、このページを確認してください。実際、Eclipse MAT wikiには、すべてのオプションを要約した「ヒープダンプの取得」セクションがあります。

上記のダンプを分析するためのツールは何ですか?

スレッドダンプには、TDA-スレッドダンプアナライザー(Sun JDKの場合)およびIBMスレッドおよびモニターダンプアナライザー(IBM JDKの場合)を使用します。Samuraiも非常に優れており(aのように機能tail -fし、std / stderrからスレッドダンプを自動的に取得します。「-verbose:gc」ログを読み取ることもできます)、Apple、BEA、HP、Sun、IBMのVMに対してテストされています。 (IBMのjavacoreも読み取ることができます)。

ヒープダンプには、必要に応じてVisualVM(Sun JDKの場合)またはIBM Heap Dump Analyzer(IBM JDKの場合のみ)または非常に優れたEclipseMATを使用します。後者は、HPROFバイナリヒープダンプ(Sun、HP、SAPなどのJVMによって生成される)、IBMシステムダンプ(前処理後)、およびさまざまなIBMプラットフォームからのIBMポータブルヒープダンプ(PHD)を処理できます。 )。

于 2010-05-28T19:28:53.937 に答える
1

JDK 6を想定して、実行中のプログラムのスレッドダンプを取得するには、次の記事を参照してください。

http://java.sun.com/developer/technicalArticles/Programming/Stacktrace/

JHatを使用して、ヒープ分析を行うことができます。

http://java.sun.com/javase/6/docs/technotes/tools/share/jhat.html

メモリダンプを実行したい場合は、jmapを見てください。

http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html

または、さらに詳細な分析を行う必要がある場合は、Yourkitなどのプロファイラーを確認してください。

http://www.yourkit.com/

于 2010-05-28T18:08:38.627 に答える
1

あなたが興味を持つことができるこれらの2つのこともあります:

于 2010-05-28T18:11:43.720 に答える
1

JVM用の標準ツールセットはありません。これらはベンダーに依存するため、ドキュメントを参照する必要があります。

Sun Java 6の場合、VisualVMプログラムは、実行中のプログラムのクイックプロファイルとスタックトレースを取得するのに非常に役立ちます。

于 2010-05-28T18:29:33.507 に答える
1

この種のSunJVMのデバッグに使用するツールは次のとおりです。

  • スレッドダンプを取るjstack
  • メモリ/ヒープダンプまたはヒストグラムを取得するためのjmap
  • jmapによって生成されたヒープダンプの事後分析用のEclipseマット
  • ビジュアルVMには、VMのライブ分析用の優れたUIがあります(ヒープおよびスレッドダンプを取得することもできます)
于 2010-05-30T02:24:33.337 に答える
0

そして、本番環境でJavaアプリケーションをデバッグする最良の方法は、ダンプなどではなく、ログを適切に管理することだと思います。

たとえば、slf4jを参照してください。

于 2010-05-28T18:24:40.650 に答える
0

メモリ割り当ての問題をデバッグするには、コマンドラインでInMemProfilerを使用できます。ライブと収集された割り当てを追跡し、収集されたオブジェクトをその存続期間に基づいてバケットに分割できます。

トレースモードでは、このツールを使用してメモリ割り当てのソースを特定できます。

于 2010-08-29T19:15:04.580 に答える