Tomcat9でCATALINA_OPTSを設定する

はじめに

Javaアプリケーションを運用していると、ヒープサイズの調整やGCログの設定など、JVMオプションを変更したくなる場面が多々ある。Tomcatではこれらの設定を CATALINA_OPTS という環境変数で行うのが一般的だ。

しかし、yumapt などのパッケージマネージャでTomcatをインストールした場合、起動スクリプトが隠蔽されていたり、ディレクトリ構成が独自だったりして、どこに設定を書けば良いのか迷うことがある。

今回は、パッケージ(特にAmazon Linuxを想定)でインストールしたTomcat 9に対して、CATALINA_OPTS を設定する方法をまとめる。

環境

想定する環境は以下の通り

OS: Amazon Linux 2 / Amazon Linux 2023
Tomcat: 9.0.x (パッケージインストール)

設定方法

/etc/sysconfig/tomcat9 の編集

Amazon Linux(やRHEL系)のパッケージでTomcat 9をインストールした場合、環境変数の設定ファイルは /etc/sysconfig/tomcat9 に配置されていることが多い。(Tomcatのバージョンやパッケージによっては単に tomcat の場合もあるので適宜読み替えてほしい)

このファイルをエディタで開き、CATALINA_OPTS を追記する。

sudo vi /etc/sysconfig/tomcat9

例えば、ヒープサイズを初期512MB、最大1024MBに設定したい場合は以下のように記述する。

CATALINA_OPTS="-Xms512m -Xmx1024m"

もし既に CATALINA_OPTS が記述されている場合は、既存の設定を消さないように追記するか、ダブルクォートの中にスペース区切りで追加する。

設定の反映

設定ファイルを保存したら、Tomcatを再起動して設定を反映させる。

sudo systemctl restart tomcat9

反映確認

設定が正しく反映されたかどうかは、プロセスを確認するのが手っ取り早い。ps コマンドでTomcatのプロセスを探し、引数に設定したオプションが含まれているか確認する。

ps aux | grep tomcat

出力結果の中に -Xms512m -Xmx1024m といった文字列が含まれていればOK。

補足:その他の設定場所

環境や好みによっては、/etc/sysconfig/tomcat9 以外に設定したい場合もある。
以下に他の代表的な方法を記載しておく。

/etc/default/tomcat9 (Debian/Ubuntu系)

もしUbuntuやDebianを使っている場合は、/etc/sysconfig ではなく /etc/default 配下に設定ファイルがあることが多い。

sudo vi /etc/default/tomcat9

書き方は同じで、CATALINA_OPTS に値を設定すれば良い。

setenv.sh (Tomcat標準)

Tomcatの標準的な作法として、$CATALINA_BASE/bin/setenv.sh というファイルを作成し、そこに環境変数を記述する方法がある。
この方法はOSやパッケージに依存しにくいため、移植性が高い。

パッケージインストールの場合、$CATALINA_BASE/usr/share/tomcat9/var/lib/tomcat9 などになっていることが多い。bin ディレクトリを探して、そこに setenv.sh を作成する。

# 例: /usr/share/tomcat9/bin/setenv.sh を作成
sudo vi /usr/share/tomcat9/bin/setenv.sh

中身はシェルスクリプトとして記述する。

export CATALINA_OPTS="$CATALINA_OPTS -Xms512m -Xmx1024m"

実行権限を与えておくのを忘れずに。

sudo chmod +x /usr/share/tomcat9/bin/setenv.sh

ただし、パッケージによってはこのファイルを読み込まない設定になっている可能性もあるので、動作確認はする必要がある。

ちなみに、標準的な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

Systemd の override

Systemdの機能を使って環境変数を上書きすることもできる。設定ファイルを直接編集したくない場合や、Systemdの作法に則りたい場合はこれがスマートかもしれない。

sudo systemctl edit tomcat9

エディタが開くので、以下のように記述する。

[Service]
Environment="CATALINA_OPTS=-Xms512m -Xmx1024m"

保存して終了すると、自動的に設定がリロードされる。その後Tomcatを再起動すれば反映される。

参考

おわりに

Tomcatの CATALINA_OPTS 設定は、パッケージインストールだとパスが分かりにくいこともあるのでまとめておいた。

個人的には、OSの作法に従うなら /etc/sysconfig/etc/default、Tomcatの作法に従うなら setenv.sh という使い分けが良いのではないかと思う。
※業務で一昨年~去年度でOS移行をしたものに関しては、/etc/sysconfig/tomcat9 に書いている。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。