LoginSignup
88
91

More than 5 years have passed since last update.

Javaのチューニングフラグまとめ(1.8.0_92時点)

Last updated at Posted at 2016-08-03

2017年10月25 -XX:MetaspaceSizeの説明が誤っていたため修正しました。

Javaのチューニングフラグです。
1.8時点でまとめました。

チューニングに関連していると思われるフラグのみ抽出

オプション 意味
-Xms ヒープメモリの初期サイズを指定する
-Xmx ヒープメモリの最大サイズを指定する
-XX:NewRatio young領域に対するold領域のサイズ比を指定する
-XX:NewSize young領域の初期サイズを指定する
-XX:MaxNewSize young領域の最大サイズを指定する
-Xmn -XX:NewSizeと同様
-XX:PermSize permanent領域の初期サイズを指定する(java7以下で有効) 
-XX:MaxPermSize 領域の最大サイズを指定する(java7以下で有効) 
-XX:MetaspaceSize メタスペースのGCを実施する目安サイズ指定(java8以降で有効)
-XX:MaxMetaspaceSize メタスペースの最大サイズを指定する(java8以降で有効)
-XX:parallelGCThreads ガベージコレクタが動くスレッド数を指定
-verbose:gc ガベージコレクションの詳細情報をログに出力する
-Xloggc:パス ガベージコレクションのログをファイルにリダイレクトする
-XX:+PrintGC -verbose:gcと同様
-XX:+PrintGCDetails ガベージコレクションの詳細情報をログに出力する
-XX:+PrintGCTimeStamps ガベージコレクションのログにjava起動時からの相対時間を出力する
-XX:+PrintGCDateStamps ガベージコレクションのログに処理実施時の時刻を出力する
-XX:+PrintReferenceGC ガベージコレクションの際に、弱い参照に対する処理を記録する
-XX:+UseGCLogFileRotation ガベージコレクションの実行ログをローテションする
-XX:NumberOfGCLogFiles ログローテーションが有効の場合保持するファイル数を指定
-XX:GCLogFileSize ログローテーションの1ファイルサイズ
-XX:+UseAdaptiveSizePolicy ヒープメモリ内の領域サイズを自動調整する
-XX:+PrintAdaptiveSizePolicy ガベージコレクションのログ中に領域サイズ変更に関する情報を出力する
-XX:+PrintTenuringDistribution ガベージコレクションのログ中で昇格する情報を出力する
-XX:+InitialSurvivorRatio young領域の中で、survivor空間のためにあらかじめ確保する量を指定する
-XX:MinSurvivorRatio young領域の中で、survivor空間について適応的に変更されるサイズを指定する
-XX:TargetSurvivorRatio survivor領域中の空容量を指定する
-XX:InitialTenuringThreshold JVMがオブジェクトを survivor領域に保持しておく期間の初期値を、ガベージコレクションの回数として表現する
-XX:MaxTenuringThreshold JVMがオブジェクトをsurvivor領域に保持しておく期間の最大値をガベージコレクションの回数として表現する

ヒープの設定例
よくある設定例を記載します(あくまで例です)

sh
#!/bin/sh
JAVA_OPTS="-Xms=512M -Xmx=512M -XX:MaxMetaspaceSize=512M"
export JAVA_OPTS

ヒープの確保値・最大値を512MB、メタスペースの最大値を512MBとしています。
・JVMを起動する際512MB確保して、それ以上増やさない設定です。
 ヒープの確保値・最大値を同じ値にした意図は確保量を拡張する際のオーバーヘッドをなくすためです
・メタスペースの最大値を512MB確保して、それ以上増やさない設定です。
 メタスペースは確保値を設定できるオプションが見つからなかったため最大値のみ指定しています。あまりメタスペースが頻繁に増加するプログラムを作ることはないかもしれませんが、仕組み上無制限に拡張できてしまうので最大値を設定して定期的にメモリをFullGCで解放します。

(参考)
java8からpermanent領域が廃止されたが、同バージョンで関連フラグがあった場合どうなるか。

設定

sh
#!/bin/sh
JAVA_OPTS="-XX:PermSize=128M -Xms512M -Xmx512M"
export JAVA_OPTS

起動

$./startup.sh
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128M; support was removed in 8.0
04-Aug-2016 01:25:40.624 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.4
・・・省略・・・

$ps aux |grep java
kusakai          1155   0.0  0.0  2441988    648 s000  R+    1:27AM   0:00.01 grep java
kusakai          1146   0.0  3.2  4421264 132964 s000  S     1:25AM   0:05.69 /Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/bin/java -Djava.util.logging.config.file=/make/apache-tomcat-8.5.4/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -XX:PermSize=128M -Xms512M -Xmx512M -Djdk.tls.ephemeralDHKeySize=2048 -classpath /make/apache-tomcat-8.5.4/bin/bootstrap.jar:/make/apache-tomcat-8.5.4/bin/tomcat-juli.jar -Dcatalina.base=/make/apache-tomcat-8.5.4 -Dcatalina.home=/make/apache-tomcat-8.5.4 -Djava.io.tmpdir=/make/apache-tomcat-8.5.4/temp org.apache.catalina.startup.Bootstrap start

記載した場合、無視しますというログが出て、起動しました。
tc.png

88
91
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
88
91