1. 概要

このチュートリアルでは、JVMのRAMパーセンテージを設定するために使用できるいくつかのJVMパラメーターについて説明します。

Java8で導入されたパラメーターInitialRAMPercentage MinRAMPercentage 、および MaxRAMPercentage は、Javaアプリケーションのヒープサイズを構成するのに役立ちます。

2. -XX:InitialRAMPercentage

InitialRAMPercentage JVMパラメーターを使用すると、Javaアプリケーションの初期ヒープサイズ構成できます。 これは、物理サーバーまたはコンテナーの合計メモリのパーセンテージであり、double値として渡されます。

たとえば、1GBのフルメモリの物理サーバーに対して-XX:InitialRAMPercentage = 50.0 を設定すると、初期ヒープサイズは約500 MB(50 % o f 1 GB)になります。

まず、JVMのInitialRAMPercentageのデフォルト値を確認しましょう。

$ docker run openjdk:8 java -XX:+PrintFlagsFinal -version | grep -E "InitialRAMPercentage"
   double InitialRAMPercentage                      = 1.562500                            {product}

openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)

次に、初期ヒープサイズを50% fまたはJVMに設定しましょう。

$ docker run -m 1GB openjdk:8 java -XX:InitialRAMPercentage=50.0 -XX:+PrintFlagsFinal -version | grep -E "InitialRAMPercentage"
   double InitialRAMPercentage                     := 50.000000                           {product}

openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)

-Xms オプションを構成する場合、JVMはInitialRAMPercentageを無視することに注意することが重要です。

3. -XX:MinRAMPercentage

MinRAMPercentage パラメーターは、その名前とは異なり、少量のメモリー(200MB未満)で実行されているJVMの最大ヒープサイズを設定できます。

まず、MinRAMPercentageのデフォルト値について説明します。

$ docker run openjdk:8 java -XX:+PrintFlagsFinal -version | grep -E "MinRAMPercentage"
   double MinRAMPercentage                      = 50.000000                            {product}

openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)

次に、パラメータを使用して、合計メモリが100MBのJVMの最大ヒープサイズを設定しましょう。

$ docker run -m 100MB openjdk:8 java -XX:MinRAMPercentage=80.0 -XshowSettings:VM -version

VM settings:
    Max. Heap Size (Estimated): 77.38M
    Ergonomics Machine Class: server
    Using VM: OpenJDK 64-Bit Server VM

openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)

また、JVMは、小さなメモリサーバー/コンテナの最大ヒープサイズを設定するときに、MaxRAMPercentageパラメータを無視します。

$ docker run -m 100MB openjdk:8 java -XX:MinRAMPercentage=80.0 -XX:MaxRAMPercentage=50.0 -XshowSettings:vm -version
VM settings:
    Max. Heap Size (Estimated): 77.38M
    Ergonomics Machine Class: server
    Using VM: OpenJDK 64-Bit Server VM

openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)

4. -XX:MaxRAMPercentage

MaxRAMPercentage パラメーターを使用すると、大量のメモリ(200 MBを超える)で実行されているJVMの最大ヒープサイズを設定できます。

まず、MaxRAMPercentageのデフォルト値を調べてみましょう。

$ docker run openjdk:8 java -XX:+PrintFlagsFinal -version | grep -E "MaxRAMPercentage"
   double MaxRAMPercentage                      = 25.000000                            {product}

openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)

次に、このパラメーターを使用して、最大ヒープサイズを60% fまたは合計500MBのメモリを備えたJVMに設定できます。

$ docker run -m 500MB openjdk:8 java -XX:MaxRAMPercentage=60.0 -XshowSettings:vm -version
VM settings:
    Max. Heap Size (Estimated): 290.00M
    Ergonomics Machine Class: server
    Using VM: OpenJDK 64-Bit Server VM

openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)

同様に、JVMは、大容量メモリサーバー/コンテナのMinRAMPercentageパラメータを無視します。

$ docker run -m 500MB openjdk:8 java -XX:MaxRAMPercentage=60.0 -XX:MinRAMPercentage=30.0 -XshowSettings:vm -version
VM settings:
    Max. Heap Size (Estimated): 290.00M
    Ergonomics Machine Class: server
    Using VM: OpenJDK 64-Bit Server VM

openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)

5. 結論

この短い記事では、JVMパラメーターの使用について説明しました InitialRAMPercentageMinRAMPercentage、 と MaxRAMPercentage JVMがヒープに使用するRAMのパーセンテージを設定します。

まず、JVMに設定されているフラグのデフォルト値を確認しました。 次に、JVMパラメーターを使用して、初期ヒープサイズと最大ヒープサイズを設定しました。