すべてのプロダクト
Search
ドキュメントセンター

Serverless App Engine:JVMオプション

最終更新日:Sep 03, 2024

このトピックでは、ヒープサイズとガベージコレクターを構成するために使用されるJava仮想マシン (JVM) 起動オプションについて説明します。

ヒープサイズの設定

ヒープサイズの設定に使用される一般的なJVMオプション

オプション

説明

-Xmx

最大ヒープサイズを設定します。

-Xmx3550mは、最大ヒープサイズを3,550 MBに設定します。

-Xms

最小ヒープサイズを設定します。

-Xms3550mは、最小ヒープサイズを3,550 MBに設定します。 ガベージコレクションのたびにヒープサイズが再配置されないように,-Xmsオプションと -Xmxオプションを同じ値にすることを推奨します。

-Xmn

若い世代のサイズを設定します。

-Xmn2gは若い世代のサイズを2 GBに設定します。 合計JVMヒープサイズ=若い世代のサイズ + 古い世代のサイズ + 永久世代のサイズ。 ほとんどの場合、パーマネント世代のサイズは64 MBです。 したがって、若い世代のサイズを大きくすると、古い世代のサイズが小さくなります。 -Xmnの値は、システムのパフォーマンスに大きく影響します。 このオプションは、合計ヒープサイズの3/8に設定することを推奨します。

-Xss

スレッドのスタックサイズを設定します。

-Xss128kは、各スレッドのスタックサイズを128 KBに設定します。

説明

JDK 5.0以降を使用する場合は、このオプションを1 MBに設定します。 以前のJDKバージョンを使用する場合は、このオプションを256 KBに設定します。 ビジネス要件に基づいて、各スレッドのスタックサイズを調整できます。 同じ物理メモリサイズの場合、このオプションの値が小さいほどスレッドが多いことを示します。 プロセス内のスレッド数はOSによって制限されます。 ほとんどの場合、プロセスは3,000から5,000のスレッドを持つことができます。

-XX:NewRatio=n

古い世代に対する若い世代の比率を設定します。

-XX:NewRatio=4若い世代と古い世代の比率を1:4に設定します。 若い世代のサイズは、エデンとサバイバースペースを合わせたサイズです。 永久世代は除外されます。 この場合、若い世代がヒープの1/5を占めます。

-XX:SurvivorRatio=n

若い世代の2つのサバイバースペースに対するエデンスペースの比率を設定します。

-XX:NewRatio=4は、若い世代の2つのサバイバースペースに対するエデンスペースの比率を2:4に設定します。 この場合、各生存者スペースは若い世代の1/6を占めます。

-XX:MaxPermSize=n

永久世代の最大サイズを設定します。

-XX:MaxPermSize=16 mは、永久世代の最大サイズを16 MBに設定します。

-XX:MaxTenuringThreshold=n

若い世代のオブジェクトの年齢を設定します。

-XX:MaxTenuringThreshold=0は、若い世代のオブジェクトの年齢を0に設定します。

  • この場合、若い世代のオブジェクトは生存者スペースを迂回し、古い世代に直接オーバーフローします。 これにより、古い世代のサイズが大きいアプリケーションの効率が向上します。

  • このオプションを大きな値に設定した場合、若い世代のオブジェクトは生存者スペースに複数回コピーされます。 これにより、オブジェクトが若い世代にとどまる期間が長くなります。 さらに、若い世代では頻繁なガベージコレクションが発生する可能性があります。

ガベージコレクターの設定

高スループットが必要なアプリケーション向けの一般的なガベージコレクタ (GC) オプション

オプション

説明

-XX:+ UseParallelGC

JVMに若い世代にパラレルGCを使用するように指示します。

例: -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+ UseParallelGC -XX:ParallelGCThreads=20 この例では、-XX:+ UseParallelGCは、若い世代がパラレルGCを使用し、古い世代がシリアルGCを使用することを指定します。

-XX:ParallelGCThreads

並列GCがガベージコレクションに同時に使用できるスレッドの数を設定します。

説明

スレッド数とGC数を同じ値に設定することを推奨します。

例: -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+ UseParallelGC -XX:ParallelGCThreads=20 この例では、-XX:ParallelGCThreads=20は、ガベージコレクションに20個のスレッドを同時に使用できることを指定します。

-XX:+ UseParallelOldGC

旧世代のパラレルGCを使用するようにJVMに指示します。

説明

JDK 6.0を使用する場合は、古い世代のパラレルGCを選択できます。

例: -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+ UseParallelGC -XX:ParallelGCThreads=20 -XX:+ UseParallelOldGC この例では、-XX:+ UseParallelOldGCは、古い世代がガベージコレクションに並列GCを使用することを指定します。

-XX:MaxGCPauseMillis

若い世代の各ガベージコレクションの最大休止時間を設定します。 JVMは、このオプションの値を維持するために、若い世代のサイズを自動的に調整します。

例: -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+ UseParallelGC -XX:MaxGCPauseMillis=100 この例では、-XX:MaxGCPauseMillis=100は、各ガベージコレクションの最大休止時間を100ミリ秒に設定します。

-XX:+ UseAdaptiveSizePolicy

アダプティブサイズポリシーを有効にします。 このオプションを設定した場合、パラレルGCは自動的に若い世代のサイズとサバイバースペースの比率を調整して、最低のレイテンシまたは最適なガベージコレクション頻度を実現します。 パラレルGCのアダプティブサイズポリシーを常に有効にすることをお勧めします。

-Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+ UseParallelGC -XX:MaxGCPauseMillis=100 -XX:+ UseAdaptiveSizePolicy

低レイテンシが必要なアプリケーションの一般的なGCオプション

オプション

説明

-XX:+ UseConcMarkSweepGC

旧世代の同時マークスイープ (CMS) GCを使用するようにJVMに指示します。

説明

-XX:+ UseConcMarkSweepGCオプションを設定する場合は、若い世代の -Xmnオプションも設定することをお勧めします。

-Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20 -XX:+ UseConcMarkSweepGC -XX:+ UseParNewGC

-XX:+ UseParNewGC

JVMに若い世代にパラレルGCを使用するように指示します。

並行GCとCMS GCは、若い世代に同時に使用できます。 JDK 5.0以降を使用する場合、JVMはシステム設定に基づいてこのオプションを自動的に設定します。 この場合、このオプションを設定する必要はありません。

-Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20 -XX:+ UseConcMarkSweepGC -XX:+ UseParNewGC

-XX:CMSFullGCsBeforeCompaction

CMS GCは、ヒープ領域をコンパクト化または管理しません。 したがって、フラグメント化は、CMS GCが特定の期間実行された後に起こる。 その結果、アプリケーションの実行効率が低下する可能性がある。 このオプションは、ヒープ領域を圧縮または管理する前に、CMS GCがヒープを実行する必要がある回数を指定します。

例: -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+ UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+ UseCMSCompactAtFullCollection。 この例では、-XX:CMSFullGCsBeforeCompaction=5は、CMS GCがヒープ領域を圧縮または管理する前に、CMS GCが5回ヒープを実行する必要があることを指定します。

-XX:+ UseCMSCompactAtFullCollection

古い世代のヒープのコンパクションを有効にします。

説明

このオプションを有効にすると、断片化の問題は回避できますが、システムのパフォーマンスが低下する可能性があります。

-Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+ UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+ UseCMSCompactAtFullCollection

一般的な冗長GCオプション

オプション

説明

-XX:+ PrintGC

GCログを印刷します。

-XX:+ PrintGCDetails

GCの詳細を印刷します。

-XX:+ PrintGCTimeStamps

JVMが起動した時刻から現在の日付までのGCタイムスタンプを出力します。 例:

0.855: [GC (割り当て失敗) [PSYoungGen: 33280K->5118K(38400K)] 33280K->5663K(125952K) 、0.0067629秒] [回数: ユーザー=0.01 sys=0.01、実際=0.00秒]

-XX:+ PrintGCDateStamps

GCタイムスタンプを日付として出力します。 例:

2022-01-27T16:22:20.885 0800: 0.299: [GCポーズ (G1避難ポーズ) (若い) 、0.0036685秒]

-XX:+ PrintHeapAtGC

ガベージコレクションの前後にヒープ情報を出力します。

-Xloggc:../logs/gc.log

ログファイルの出力パスを設定します。