Java 仮想マシン (JVM) は、パフォーマンスの最適化と本番環境の問題のトラブルシューティングに役立つ 3 つの重要なアーティファクトを生成します。 これらのアーティファクトは次のとおりです。

  1. ガベージ コレクション (GC) ログ
  2. スレッドダンプ
  3. ヒープダンプ

1.ガベージコレクションログ

a) GC ログとは?

GC ログには、ガベージ コレクション イベント関連の情報が含まれています。 実行された GC イベントの数、GC イベントのこのコマンドのタイプ (Young GC または Full GC)、各 GC イベントがアプリケーションを一時停止する時間、各 GC イベントが回収したオブジェクトの数が示されます。

b) GC ログはどのようなものですか?

サンプルのガベージ コレクション ログ ファイルは、こちらにあります。

c) GC ログはどこで使用されますか?

ガベージ コレクションのログは、アプリケーションの GC とメモリのパフォーマンスを調査するために使用されます。 GC の一時停止時間を最適化したり、アプリケーションに最適なメモリ サイズを特定したり、メモリ関連の問題をトラブルシューティングしたりするために使用されます。

d) GC ログを生成する方法は?

次の JVM 引数を渡すことで、ガベージ コレクション ログを生成できます。

8 までの Java バージョンの場合:

9 以降の Java バージョンの場合:

file-path: ガベージ コレクションのログ ファイルが書き込まれる場所です。

e) GC ログを理解する方法は?

ガベージ コレクションのログ形式は、JVM ベンダー (Oracle、HP、IBM、Azul など)、Java バージョン (1.5、5、6、7、8、9、10、11、12、…)、ガベージによって異なります。収集アルゴリズム (シリアル、パラレル、CMS、G1、Shenandoah、Z GC) および渡す JVM 引数。 したがって、利用できる標準化された形式は 1 つではありません。 ただし、GC ログ ファイル形式を理解するのに役立つビデオ チュートリアルがあります。

f) GC ログの分析に使用するツールは?

複数のガベージ コレクション ログ分析ツールがあります。 人気のあるもののいくつかをここに示します: GCeasy、IBM GC & Memory ビジュアライザー、HP JMeter、Google Garbage Cat

2.スレッドダンプ

a) スレッドダンプとは?

スレッド ダンプは、ある時点でアプリケーションで実行されているすべてのスレッドのスナップショットです。 スレッドの状態、スレッド ID、ネイティブ ID、スレッド名、スタック トレース、優先度など、アプリケーション内の各スレッドに関するすべての情報が含まれています。

b) スレッド ダンプはどのようなものですか?

サンプルのスレッド ダンプは、ここにあります。

c) スレッド ダンプはどこで使用されますか?

スレッド ダンプは、主に、CPU スパイク、アプリケーションの無応答、応答時間の低下、スレッドのハング、メモリ消費量の増加など、運用上の問題のトラブルシューティングに使用されます。

d) スレッド ダンプを生成する方法

8 つの異なるオプションを使用して、実行中のアプリケーションからスレッド ダンプを取得できます。 スレッド ダンプを取得する最も一般的なオプションは、「jstack」ツールを使用することです。 jstack ツールは、JDK_HOMEbin フォルダーに同梱されています。 スレッド ダンプを取得するために発行する必要があるコマンドは次のとおりです。

pid: スレッド ダンプを取得するアプリケーションのプロセス ID です。

file-path: スレッド ダンプが書き込まれるファイル パスです。

e) スレッド ダンプを理解する方法は?

これは、スレッド ダンプを理解する方法についての詳細な概要を提供するビデオ トークです。

f) スレッド ダンプの分析に使用するツールは?

最も広く使用されているスレッド ダンプ分析ツールは、fastThread、Samurai、IBM Thread & Monitor アナライザー、Visual VM です。

3.ヒープダンプ

a) ヒープダンプとは?

ヒープ ダンプは、ある時点でのアプリケーションのメモリのスナップショットです。 これには、メモリ内のオブジェクト、オブジェクトが保持する値、サイズ、参照する他のオブジェクトなどの情報が含まれます。

b) ヒープ ダンプはどのように見えますか?

サンプルのヒープ ダンプは、こちらにあります。 (注: バイナリ形式になるため、実際には読み取ることができません)。

c) ヒープ ダンプはどこで使用されますか?

ヒープ ダンプは、主にメモリ関連の OutOfMemoryError 問題のトラブルシューティングに使用されます。

d) ヒープ ダンプを生成する方法

7 つの異なるオプションを使用して、実行中のアプリケーションからヒープ ダンプを取得できます。 ヒープ ダンプを取得する最も一般的なオプションは、「jmap」ツールを使用することです。 jmap ツールは JDK_HOMEbin フォルダーに同梱されています。 キャプチャするために発行する必要があるコマンドは次のとおりです。

pid: ヒープ ダンプを取得する Java プロセス ID です。

file-path: ヒープ ダンプが書き込まれるファイル パスです。

e) ヒープダンプを理解するには?

ヒープ ダンプ ファイルはバイナリ形式で、サイズが大きくなる傾向があります。 それに加えて、それらの形式にはドキュメントが大幅に不足しています。 したがって、ヒープ ダンプ分析ツール (次の質問で提供) を使用して分析し、理解する必要があります。

f) ヒープ ダンプの分析に使用するツールは?

最も広く使用されているヒープ ダンプ分析ツールは、Eclipse MAT、HeapHero、JVisualVM です。
この記事で、ガベージ コレクション ログ、スレッド ダンプ、およびヒープ ダンプを分析する方法のすべての方法がカバーされることを願っています。 この記事が本当に役に立ったと思われる場合は、この情報を友人、親戚、家族などと共有してください。 次の投稿でお会いしましょう signalfix.net!