もなかアイスの試食品

「とりあえずやってみたい」そんな気持ちが先走りすぎて挫折が多い私のメモ書きみたいなものです.

Tomcatのメモリ割り当てを自動で計算する

はじめに

AWSTomcatサーバを作ったとき、インスタンスタイプに合わせて、毎回別のチューニングするのは面倒臭い。

なので、Tomcatに割り当てるメモリサイズを自動計算するスクリプトを作った

参考サイト

groupsession.jp

yasuhiroa24.hateblo.jp

secureassist.jp

park1.wakwak.com

d.hatena.ne.jp

Tomcatのメモリサイズの自動計算

参考にしたサイトに以下のことが書いてあった

  • パーマネント領域(-XX:MaxPermSize)搭載メモリの8分の1程度(初期値:64m)。
  • メモリ最大使用量(-Xmx)搭載メモリの半分程度。
  • メモリ初期使用量(-Xms)Xmxで指定した数値の半分位。

なので、書き込みを鵜呑みにして、以下のスクリプトを作成

# https://groupsession.jp/support/setup_08.html
# http://yasuhiroa24.hateblo.jp/entry/2017/01/11/162101
MAX_MEM_SIZE=$(free -m | awk '/^Mem:/ {printf("%d", $2 / 2)}')
START_MEM_SIZE=$(free -m | awk '/^Mem:/ {printf("%d", $2 / 4)}')
PERM_MEM_SIZE=$(free -m | awk '/^Mem:/ {printf("%d", $2 / 8)}')

if [ $PERM_MEM_SIZE -gt 256 ]
then
    PERM_MEM_SIZE=256
fi

CATALINA_OPTS="-Xms${START_MEM_SIZE}m -Xmx${MAX_MEM_SIZE}m -XX:MaxPermSize=${PERM_MEM_SIZE}m -server"

XX:MaxPermSizeのサイズは「256MBあれば十分」といくつかのサイトで見かけたので、256MB以上割り当てないようにした。

Tomcatをダウンロードした場合

Tomcatの解凍ディレクトリ】/binの中にファイル「setenv.sh」(Windowsの場合は「setenv.bat」らしい)を新規作成する。

Tomcatをコマンドでインストールした場合

Amazon Linuxでは、Tomcat8がyumからインストールできる。

yumコマンドからインストールしたとき、setenv.shを作成しても設定が反映されなかった。

色々フォルダ・ファイルを漁ってみると、/etc/tomcat8/tomcat8.confというファイルがあり、このファイルで変数を突っ込む感じ

なので、ファイル/etc/tomcat8/tomcat8.confの最後に追加する

確認

以下のコマンドで、Tomcatのパラメータを確認

ps aux | grep java

/usr/lib/jvm/jre/bin/java -Xms246m -Xmx493m -XX:MaxPermSize=123m -server -classpath :/usr/share/tomcat8/bin/bootstrap.jar:/usr/share/tomcat8/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/usr/share/tomcat8 -Dcatalina.home=/usr/share/tomcat8 -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat8/temp -Djava.util.logging.config.file=/usr/share/tomcat8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start