デフォルトだと -Xmx128m
この間この Blog システムを Tomcat (Spring Boot) 上で動作するように修正したのだが、それからどうも動作が緩慢になったように思っていた。
確かに Load Average を見ても高めの値を示している。
そして、画像をアップロードしたら OutOfMemoryError: Java heap space.
でクラッシュした。
これはまずいと調査を開始した。
Tomcat のヒープサイズは Ubuntu Server のデフォルトの状態だと -Xmx128m (最大ヒープサイズ 128 M) になっている。
これは Tomcat 起動時に catalina.out
にログ出力されているので確認する:
view /var/log/tomcat8/catalina.out
" CATALINA_BASE, CATALINA_HOME もログ出力されているので確認しておく
CATALINA_BASE: /var/lib/tomcat8
CATALINA_HOME: /usr/share/tomcat8
...(略)...
Command line argument: -Xmx128m
setenv.sh
Tomcat のヒープサイズを変更するために Tomcat 起動時に環境変数を渡すにはどうしたら良いのか調べてみたが setenv.sh
を定義するのがいいらしい。
Ubuntu のデフォルトではこのファイルは存在しないので $CATALINA_HOME/bin
若しくは $CATALINA_BASE/bin
に作成する必要がある。
Tomcat を起動するためにキックされる catalina.sh
に以下のように書かれている:
if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
. "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
. "$CATALINA_HOME/bin/setenv.sh"
fi
そこで $CATALINA_HOME/bin/setenv.sh
に以下のように作成する:
export CATALINA_OPTS='-Xms256m -Xmx512m -Xss1024k -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled'
変更を適用するために Tomcat を再起動する:
sudo service tomcat8 restart
catalina.out
を確認すると正しくこの値が使用されているのがわかる:
情報: Command line argument: -Xms256m
情報: Command line argument: -Xmx512m
また ps aux | grep tomcat8
のようにプロセスを検索しても良い。