nekop's blog

OpenShift / JBoss / WildFly / Infinispanの中の人 http://twitter.com/nekop

JBoss AS7のJava VMオプションチューニング 2012年末版

JBoss Advent Calendar 2012の18日目のエントリ。前にJBoss AS 7.1.0のときのJava VMオプションを書いたのだけど、あれからほんのちょびっと変わってるので再度書いておこう。

主要なところは全然変わってないのだけど。

PRESERVE_JAVA_OPTS=true
JAVA_OPTS="-server"
JAVA_OPTS="$JAVA_OPTS -Xmn128m -Xms512m -Xmx512m -XX:MaxPermSize=256m -Xss512k"
JAVA_OPTS="$JAVA_OPTS -Xverify:none" # do not use this in production
JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC"
JAVA_OPTS="$JAVA_OPTS -XX:+TieredCompilation"
JAVA_OPTS="$JAVA_OPTS -XX:+UseCompressedOops" # 64bit only!
# JAVA_OPTS="$JAVA_OPTS -Xloggc:gc.log.`date +%Y%m%d%H%M%S`" # enable in production
JAVA_OPTS="$JAVA_OPTS -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError"
JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"
JAVA_OPTS="$JAVA_OPTS -Dorg.jboss.resolver.warning=true"
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS"
JAVA_OPTS="$JAVA_OPTS -Djboss.server.default.config=standalone.xml"
# JAVA_OPTS="$BYTEMAN_OPTS $JAVA_OPTS"

システムプロパティ群は一行が長めで見づらくなりがちなので、一行にひとつルールにした。あと、jboss系のシステムプロパティを下方に固めるようにした。

システムプロパティからRMIのgcIntervalを3600000(1時間)に設定している部分を消したのだけど、Java 6からこのシステムプロパティのデフォルト値が3600000に変更されたので、もう指定する意味がないので消した。Remove RMI gcInterval system props from default Java VM optionsというpull reqも飛ばしたのでAS 7.2系のリリースからは消えてる。

Byteman関連の設定はこんな感じ。Bytemanがリリースされて入れ替えるたびにバージョン文字列を書き換えたりするのがイヤなので、BYTEMAN_HOMEは実際にはシンボリックリンクにしてあってByteman最新版を指すようにしてある。

BYTEMAN_HOME=/path/to/byteman
# BYTEMAN_RULE=
BYTEMAN_OPTS="-javaagent:$BYTEMAN_HOME/lib/byteman.jar=listener:true,boot:$BYTEMAN_HOME/lib/byteman.jar"
if [ "x$BYTEMAN_RULE" != "x" ]; then
   BYTEMAN_OPTS="${BYTEMAN_OPTS},script:$BYTEMAN_RULE"
fi
BYTEMAN_OPTS="$BYTEMAN_OPTS -Dorg.jboss.byteman.transform.all -Dorg.jboss.byteman.debug"