jboss

JBOSSチューニング

More than 1 year has passed since last update.

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ヒープの多くを占めているクラスをテキスト形式で取得できる。

解析ツール


参考