Javaアプリケーションの本番環境の問題をデバッグするためのさまざまなツールとテクニックは何でしょうか。好き、
- スレッドダンプを取得する方法とツールは何ですか?
- ヒープダンプを取得する方法とツールは何ですか?
- 上記のダンプを分析するためのツールは何ですか?
(すべてLinux / Unix環境にあると仮定します)
Javaアプリケーションの本番環境の問題をデバッグするためのさまざまなツールとテクニックは何でしょうか。好き、
(すべてLinux / Unix環境にあると仮定します)
スレッドダンプを取得する方法とツールは何ですか?
スレッドダンプの場合は、JConsole、VisualVMを使用するか、より簡単に言えば、QUITシグナルをターゲットプロセスに送信できます。
kill -QUIT <pid>
また
kill -3 <pid>
Java 5以降、jstack
プラットフォームに依存せず-m
、Javaフレームとネイティブフレームの両方を印刷するための優れたオプション(混合モード)もあります。
ヒープダンプを取得する方法とツールは何ですか?
Sun VMの場合、、 jmap
Sun 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)を処理できます。 )。
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などのプロファイラーを確認してください。
あなたが興味を持つことができるこれらの2つのこともあります:
JVM用の標準ツールセットはありません。これらはベンダーに依存するため、ドキュメントを参照する必要があります。
Sun Java 6の場合、VisualVMプログラムは、実行中のプログラムのクイックプロファイルとスタックトレースを取得するのに非常に役立ちます。
この種のSunJVMのデバッグに使用するツールは次のとおりです。
そして、本番環境でJavaアプリケーションをデバッグする最良の方法は、ダンプなどではなく、ログを適切に管理することだと思います。
たとえば、slf4jを参照してください。
メモリ割り当ての問題をデバッグするには、コマンドラインでInMemProfilerを使用できます。ライブと収集された割り当てを追跡し、収集されたオブジェクトをその存続期間に基づいてバケットに分割できます。
トレースモードでは、このツールを使用してメモリ割り当てのソースを特定できます。