Tomcatのメモリ割り当てを自動で計算する
はじめに
AWSでTomcatサーバを作ったとき、インスタンスタイプに合わせて、毎回別のチューニングするのは面倒臭い。
なので、Tomcatに割り当てるメモリサイズを自動計算するスクリプトを作った
参考サイト
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