Java ドラッグレース
チューニング
Takayoshi Kimura
Senior Software Maintenance Engineer
Global Support Service, Red Hat
Java VM
起動速度遅い
そんな幻想を
!ぶち壊す
環境
● Dell Latitude E6320
● 法人向けラップトップ
● Intel(R) Core(TM) i7-2620M CPU @
2.70GHz
● 16GB memory
環境
● Fedora 19 64bit
● Linux 3.10.5-201.fc19.x86_64
● java-1.7.0-openjdk-1.7.0.25-
2.3.12.3.fc19.x86_64
WildFly
8.0.0.Alpha4
started in
2412ms
Tuned
WildFly
8.0.0.Alpha4
started in
1059ms
?なにをしたのか
● 2412ms から 1059ms
● 224% パフォーマンス向上
● 2 点
● ふつうに JVM オプションの変更
● ふつうそんなことやらねーよ、って
いう荒技
Java VM オプション
● -client
● 32bit のみ
● -server
● -XX:+TieredCompilation
● -XX:TieredStopAtLevel=1
Java VM オプション
● サーバアプリケーションでは最
適化が抑制されるため長期的に
はパフォーマンス不利
● -client
● -XX:TieredStopAtLevel=1
Java VM オプション
● TieredCompilation
● Java 8 からデフォルトで有効
● codecache の使用量が多くなる
Java VM オプション
● -Xverify:none
● クラス検証無効化
● テスト環境や本番環境では検証は有
効にしておこう
デモ
● WildFly 8.0.0.Alpha4 の JVM オ
プションチューニング
● 前 : 2400ms
● 後 : 1200ms
!まだいける
荒技
#!/bin/sh
# Example: $ find . -type f -name *.jar | xargs -n1 fatjar
set -e
JARFILE=$(realpath $1)
TMPDIR=/tmp/fatjar.tmp
echo "Fat $JARFILE"
rm -rf $TMPDIR
mkdir -p $TMPDIR
(cd $TMPDIR; jar xf $JARFILE)
if [ -f $TMPDIR/META-INF/MANIFEST.MF ]; then
jar c0fm $JARFILE $TMPDIR/META-INF/MANIFEST.MF -C $TMPDIR .
else
jar c0f $JARFILE -C $TMPDIR .
fi
rm -rf $TMPDIR
デモ
● WildFly 8.0.0.Alpha4 に荒技適
用
● 前 : 1200ms
● 後 : 1050ms
まとめ
ソフトウェア チューニング前
(ms)
チューニング後
(ms)
WildFly 8.0.0.Alpha4 2400 1100
GlassFish 4.0.0 4000 1300
JBoss EAP 6.1.0 2200 1100
JBoss EAP 5.2.0 13800 7000
JRuby 1.7.4 1000 620
Clojure 1.5.1 800 390
Scala 2.10.2 460 410
Groovy 2.1.6 550 270
まとめ
● JVM オプション
● -Xverify:none
● -XX:+TieredCompilation
● -XX:TieredStopAtLevel=1
● 非圧縮 jar
Java Drag Race Tuning

Java Drag Race Tuning