Tomcatの使用メモリの設定をしてみた。

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関連の設定などの際にも利用できます。

Tomcat 9.0系のマイナーバージョンアップをしてみた。

Tomcat 9.0系に脆弱性が見つかったためマイナーバージョンアップをしました。Tomcatを動かしている環境は Amazon Linux 2023 です。Tomcatのバージョンは 9.0.89 から 9.0.106にあげました。

Tomcatのダウンロードサイトからtarファイルを取得します。

ダウンロードしたファイルは apache-tomcat-9.0.106.tar.gz というファイル名でした。

ハッシュ値を確認しておきます。ダウンロードサイトにあるsha512のリンクをクリックして表示された文字列をメモしておきます。以下のコマンドで文字列が一致するか確認をします。

$ sha512sum apache-tomcat-9.0.106.tar.gz

一致すればダウンロード時の破損はありません。ダウンロードしたファイルを Amazon Linux 2023 のTomcatを配置するディレクトリに持っていきます。

ここで、Tomcatのマイナーバージョンアップでやることを先に書いておきます。

  • 新しいTomcatを解凍して配置する。
  • 古いTomcatにあるWebアプリケーションのフォルダを新しいTomcatにコピーする。
  • 新しいTomcatの不要なWebアプリケーションのフォルダを削除する。
  • 新しいTomcatのconfファイル(server.xml)を修正する。

このような感じです。

新しいTomcatを解凍します。

$ tar xf apache-tomcat-9.0.106.tar.gz

解凍すると apache-tomcat-9.0.106 というフォルダができます。フォルダは任意の名前に変更しても構いません。解凍に使用したtarファイルは不要なので削除します。

古いTomcatにあるWebアプリケーションフォルダをアーカイブします。WebアプリケーションフォルダはTomcatの webapps 配下のものです。古いTomcatの webapps 配下まで移動してから tarコマンドを実行します。

$ tar cf tool.tar tool

tool.tar がアーカイブファイル名、tool が移行するWebアプリケーションフォルダです。アーカイブした tool.tar ファイルを新しいTomcatの webapps 配下に持っていき展開します。

$ tar xf tool.tar

展開をしたら tool.tar ファイルは不要ですので削除します。新しいTomcatにはデフォルトで ROOT、docs、examples、host-manager、manager のアプリケーションフォルダがありますので、こちらも削除をします。削除は必要に応じて判断してください。

最後にTomcatのコンフィグファイルを修正します。コンフィグファイルの修正内容は環境によって変わるかと思います。コンフィグファイルは conf 配下にあります。僕の場合は server.xml の修正をしました。古いTomcatのserver.xml を新しいTomcatに持っていっても使えるような気はしますが、新しいTomcat側で編集をしました。

$ vi server.xml

編集内容はポートの変更です(ポートを8080から8000に変更)。


<Connector port="8000" protocol="HTTP/1.1"
	connectionTimeout="20000"
	redirectPort="8443"
	maxParameterCount="1000"
	/>

ここまで出来たら新しいTomcatを起動させます。bin フォルダ配下のシェルを実行します。

$ ./startup.sh

ウェブブラウザからアクセスしてウェブアプリケーションが動けば終わりです。

[2025/07/12 追記]
解凍したあとのTomcatフォルダの名称の変更ですが、Tomcat配下のファイルにアクセスしている場合があると、それもあわせて修正をする必要がありますので、注意してください。Let’s Encryptでサーバー証明書を取得している場合、/etc/letsencrypt/renewal 配下にあるconfファイルの修正が必要なケースがあります。