JBOSSチューニングパラメータ
環境
- Windows7
- JBOSS EAP 6
standalone.conf.bat
:JAVA_OPTS_SET
set "JAVA_OPTS=-Xmn2G -Xms4G -Xmx4G -XX:MaxPermSize=512M"
set "JAVA_OPTS=%JAVA_OPTS% -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman"
set "JAVA_OPTS=%JAVA_OPTS% -verbose:gc -Xloggc:%JBOSS_HOME%\standalone\log\gc.log"
set "JAVA_OPTS=%JAVA_OPTS% -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
set "JAVA_OPTS=%JAVA_OPTS% -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M"
set "JAVA_OPTS=%JAVA_OPTS% -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%JBOSS_HOME%\standalone\log\"
パラメータ詳細
-Xmn
New領域サイズ
-Xms
ヒープ全体(New領域+Old領域)の初期値
-Xmx
ヒープ全体(New領域+Old領域)の最大値
-XX:MaxPermSize
Permanent 領域の最大値
-Djava.net.preferIPv4Stack=true
IPv4アドレス優先
-Djboss.modules.system.pkgs=org.jboss.byteman
バイトコード操作用
-verbose:gc
GCログ出力(簡易版)
-Xloggc:%JBOSS_HOME%\standalone\log\gc.log
GCログの出力と出力先の設定
このままだとファイル名が上書きされるのでタイムスタンプを付加できるようにしたい。
gc.log.`date +%Y%m%d%H%M%S`みたいな。でもDOSだとわかんない。
-XX:+PrintGCDetails
GCログを詳細に出力(New領域とJavaヒープそれぞれがどれだけ減ったか出力される)
-XX:+PrintGCTimeStamps
GCログにタイムスタンプ(Java起動時からの経過時間)を出力
-XX:+UseGCLogFileRotation
GCログのファイルローテーション
-XX:NumberOfGCLogFiles=5
5ファイルでローテーション
これ追加すると何故かメモリリークする
-XX:GCLogFileSize=10M
10Mでサイズローテーション
これ追加すると何故かメモリリークする
-XX:+HeapDumpOnOutOfMemoryError
OutOfMemoryError発生時にヒープダンプを出力
-XX:HeapDumpPath=%JBOSS_HOME%\standalone\log\
ヒープダンプ出力先の設定
今後決めておくべきパラメータ
-XX:SurvivorRatio
Eden領域のサイズをS0またはS1領域のサイズで割った値
-XX:MaxTenuringThreshold
マイナーGCの繰り返しによりOld領域へ配置される閾値
|-XX:TargetSurvivorRatio
Survivor領域がいっぱいと判断される使用率
クラスヒストグラムは定期的に取得する
jcmd <pid> GC.class_histgram
Javaヒープの多くを占めているクラスをテキスト形式で取得できる。