概要:
この記事はJVMの設定項目について調べたことをまとめたものです。
設定項目のうち、主にメモリ関連の設定を紹介します。
また、一部の設定を変更し、その確認をおこないます。
環境情報:
- Java バージョン17.0.6
- OS:Mac(Apple M1) 13.4
目次:
- JVMの設定について
- 設定を変更してみる
- KeycloakのJVMの設定方法
- まとめ
JVMの設定について:
JVM(Java Virtual Machine)はJavaのプログラムを実行するソフトウェアです。
この設定を変更することで、プログラムが使用するメモリサイズ等を指定することができます。
設定の変更は、javaコマンドにオプションを指定することでおこなえます。
Javaのオプションについて:
Javaのオプションには以下の種類があります。
- 標準オプション
- 追加オプション
- 拡張オプション
標準オプション:
全てのJVMでサポートされているオプションです。
例えば以下のようなものがあります。
--class-path パス
クラスパスを指定するオプションです。
引数にパスを指定します。--show-version
Javaのバージョンを表示してするオプションです。
処理はそのまま続きます。-verbose:class
ロードされるクラスの情報を表示するオプションです。
追加オプション:
すべてのJVMでサポートされている保証がないオプションです。-X
で始まります。
例えば以下のようなものがあります。
-Xms サイズ
最小ヒープサイズを指定するオプションです。
引数には以下のようにサイズを指定します。
kやmを引数の後ろにつけることで、キロバイト、メガバイト単位の指定ができます。-Xms 16777216
-Xms 16384k
-Xms 16m
-Xmx サイズ
最大ヒープサイズを指定するオプションです。
引数には以下のようにサイズを指定します。-Xmx 33554432
-Xmx 32768k
-Xmx 32m
-XshowSettings
JVMやホスト、ロケール等の設定を表示するオプションです。
処理はそのまま続行します。
拡張オプション:
こちらもすべてのJVMでサポートされている保証がないオプションです。
-XXで始まります。
例えば以下のようなものがあります。
-XX:MaxHeapSize=サイズ
最大ヒープサイズを指定するオプションです。
追加オプションの -Xmx と同じです。-XX:NewSize=サイズ
New領域のサイズを設定するオプションです。
引数にサイズを指定します。-XX:MaxNewSize=サイズ
New領域のサイズの最大サイズを設定するオプションです。
引数にサイズを指定します。-XX:SurvivorRatio=比率
New領域のうち、Eden領域とSurvivor領域のサイズ比率を設定します。
デフォルトは8に設定されています。-XX:+PrintFlagsFinal
JVMの設定値の一覧を表示するオプションです。
無効にする場合-XX:-PrintFlagsFinal
を指定します。
設定方法について:
javaコマンドの引数にオプションを指定することで、JVMの設定を変更してプログラムを実行できます。
以下のように指定します。
java オプション プログラム名
設定を変更してみる:
実際にオプションを指定して動作を確認してみます。
JVMの設定の中で、メモリに関する以下のオプションを指定して結果を確認します。
変更を試すオプション:
-Xms
-Xmx
-XX:NewSize
-XX:MaxNewSize
プログラムの作成:
プログラムを作成します。
今回使用したjavaのプログラムは以下になります。
ループを繰り返すのみのプログラムになります。
- Loop.java
public class Loop {
public static void main(String[] args){
System.out.println("実行中...");
while(true){
}
}
}
- ターミナルを開き、好きなディレクトに移動します。
Loop.javaファイルを作成します。
vi Loop.java以下のコマンドでコンパイルします。
javac Loop.java
プログラムの実行:
プログラムがコンパイルできたらプログラムを実行し、設定が変更されるかを確認します。
変更した設定は、-XX:+PrintFlagsFinal
オプションをつけることで確認できます。
- 最初に
-XX:+PrintFlagsFinal
オプションのみを指定して実行してみます。
java -XX:+PrintFlagsFinal Loop
実行結果を確認します。
画像のように設定の一覧が表示されます。設定の一覧の中から、以下の値を確認しておきます。
size_t MinHeapSize = 8388608
size_t MaxHeapSize = 4294967296
size_t MaxNewSize = 2575302656
size_t NewSize = 1363144
次に以下のオプションを設定して実行します。
-Xms
-Xmx
-XX:NewSize
-XX:MaxNewSize
オプションを追加して実行します。
java -XX:+PrintFlagsFinal \
-Xms16m \
-Xmx32m \
-XX:NewSize=128 \
-XX:MaxNewSize=16m \
Loop
- 実行を確認します。
実行した結果、以下の値が設定されているか確認します。size_t MinHeapSize = 16777216
size_t MaxHeapSize = 33554432
size_t MaxNewSize = 16777216
size_t NewSize = 128
KeycloakのJVMの設定方法:
Keycloakでは、JAVA_OPT環境変数でオプションを指定することができます。-Xmx
を1024メガバイトにする場合は以下のように指定します。
export JAVA_OPTS="$JAVA_OPTS -Xmx1024m"
実行すると画像のようになります。
まとめ:
今回はJVMの設定項目について紹介しました。
設定項目は今回紹介した以外にも多くあるため、
今後調べてみようと思います。
参考にしたところ:
- 閲覧数 483


コメントを追加