JVM GC 構成ガイドの分析 | JD Cloud テクニカル チーム

この記事は各コレクタのチューニングパラメータを簡単に説明することを目的としていますので、漏れがあればご指摘ください。

1.JDKのバージョン

以下の最適化はすべて JDK8 バージョンに基づいています。下位バージョンを JDK8 にアップグレードし、可能な限り update_191 以降のバージョンを使用することを強くお勧めします。

2.ガベージコレクターの選び方

応答優先アプリケーション: 応答時間に敏感な C 側アプリケーションの場合、ヒープ メモリが 8G を超える場合は G1 を選択し、ヒープ メモリが小さいか JDK のバージョンが低い場合は CMS を選択することをお勧めします。

スループット優先アプリケーション: 応答時間の影響を受けず、高スループットを目標とするアプリケーション (MQ、ワーカーなど) には、ParallelGC を選択することをお勧めします。

3. 各コレクタのパラメータを最適化する

1) 基本パラメータ設定 (すべてのアプリケーションとすべてのコレクタに必要):

-Xmx (通常はコンテナー メモリの 50%)

-Xms (Xmx と一致)

-XX:MetaspaceSize(通常256M~512M)

-XX:ParallelGCThreads=コンテナコアの数

-XX:CICompilerCount=コンテナコアの数 (2 以上である必要があります)

2)パラレルGC

上記のパラメーターに加えて、通常は追加のチューニングは必要ありません (JDK8 のデフォルト コレクター)

3)CMS

-XX:+UseConcMarkSweatGC

-Xmn (通常はヒープ メモリの 3 分の 1)、特に設定後は ParallelGCThreads を設定する必要があります。

-XX:ConcGCThreads=n (デフォルトは ParallelGCThreads/4 ですが、状況に応じて ParallelGCThreads/2 に調整できます)

-XX:+UseCMSInitiatingOccupancyOnly

-XX:CMSInitiatingOccupancyFraction=70 (推奨値)

4)G1

-XX:+G1GC を使用する

-XX:ConcGCThreads=n (デフォルトは ParallelGCThreads/4 ですが、状況に応じて ParallelGCThreads/2 に調整できます)

-XX:G1HeapRegionSize=8m (ヒープ メモリが 8G 以内で、大きなオブジェクトが多い場合は、この値を設定することをお勧めします)

※-XmnとXX:NewRatioを設定しないように注意してください。

5) その他のチューニングパラメータ

-XX:+ParallelRefProcEnabled GC 中の Reference 処理時間が長い場合 (たとえば、多数の WeakReference オブジェクトが使用される場合)、このパラメータを通じて並列処理を有効にすることができます。

4. GC ログをオンにする

-XX:+PrintGC詳細

-XX:+PrintGCDateStamps

-Xloggc:/export/Logs/gc.log

5. GCが正常かどうかの判断方法

1) GC の頻度: YoungGC の頻度は通常数十秒、FullGC の頻度は通常 1 日に数回です。FullGC は G1 リサイクラーに表示されないことに注意してください。

2) GC 消費時間: 消費時間は主にヒープ メモリのサイズとガベージ オブジェクトの数によって決まります。通常、YoungGC 時間は数十ミリ秒、FullGC 時間は数百ミリ秒になります。

3) GC メモリが毎回低下するかどうか: アプリケーションを開始したばかりの場合、YoungGC メモリは毎回低い水位にリサイクルされる必要がありますが、時間が経過するにつれて、古い世代が徐々に増加し、メモリの水位が徐々に低下します。 FullGC/MixedGC (G1) まで上昇すると、メモリは再び下限ウォーターマークに戻ります。そうしないと、メモリ リークが発生する可能性があります。

4) ParallelGC を使用する場合、ヒープ メモリが使い果たされた場合にのみ FullGC がトリガーされるため、ヒープ メモリ使用量アラームを設定する必要はありませんが、GC 頻度に注意する必要があります。

5) JVM 構成の一部は Taishan で検査できます。

著者: 京東リテール 王立輝

出典: JD Cloud 開発者コミュニティ

おすすめ

転載: blog.csdn.net/jdcdev_/article/details/131678341