Tomcat9 の使用メモリの設定をしみてました。環境は以下です。
Amazon Linux 2023(メモリ1G)
Tomcat 9.0.106
Linuxのメモリが1Gしかないので、Tomcatに割り当てるメモリは小さめにします。
Tomcatのホーム配下にある bin ディレクトリに setenv.sh というファイルを新規作成します。setenv.sh に記載する内容は以下です。
export CATALINA_OPTS="-Xms64m -Xmx128m -XX:MaxMetaspaceSize=128m"
- -Xms64m・・・初期のヒープメモリを64MBにする。JVMが動くとき最初に確保されるメモリ。
- -Xmx128m・・・ヒープメモリの使用は最大で128MBにする。
- -XX:MaxMetaspaceSize=128m・・・クラスロードに使用する領域を128MBに制限する。
setenv.sh は .sh の拡張子がついていますが、先頭行に #!/bin/sh の記載はしません。これは setenv.sh がTomcatの起動スクリプト( catalina.sh )から source により読み込まれるためです。これにより setenv.sh は実行権限(x)もいりません。読み取り権限(r)だけあればよいです。
また、使用するメモリが小さいためスレッド数の調整もしておきます。conf ディレクトリにある server.xml に maxThreads の追記をします。アクセス数が少ないことを想定して maxThreads を50にしておきます。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxParameterCount="1000" maxThreads="50" />
Tomcatを起動します。起動時に設定が表示されます。
$ ./startup.sh Using CATALINA_BASE: /home/user/tomcat-09.0.106 Using CATALINA_HOME: /home/user/tomcat-09.0.106 Using CATALINA_TMPDIR: /home/user/tomcat-09.0.106/temp Using JRE_HOME: /usr Using CLASSPATH: /home/user/tomcat-09.0.106/bin/bootstrap.jar:/home/user/tomcat-09.0.106/bin/tomcat-juli.jar Using CATALINA_OPTS: -Xms64m -Xmx128m -XX:MaxMetaspaceSize=128m Tomcat started.
この設定は小規模アプリで接続ユーザー数も少ない場合ですので、各自の環境にあわせて調整してください。
なお今回はヒープサイズの調整のために setenv.sh に設定を記載しましたが、GC関連の設定などの際にも利用できます。