親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。育児のイロハという育児サイト(https://ikujip.jp)の開発も行っているため、その開発で使用されている技術についても掲載しています。

TomcatのインストールとCATALINA_OPTSの設定

Tomcatのインストールの仕方でCATALINA_OPTSの設定方法も異なる

Java Servlet を動かすために必要なコンテナとしてよく使用されているTomcatですが、Linux環境にインストールする方法としては大きく2つあります。
それぞれの違いはご存知ですか?
インストール方法によって、起動の仕組みが変わるため、CATALINA_OPTSの設定方法も変わってきます。
ここではその違いについて記したいと思いますので参考にしていただければ。

CATALINA_OPTSを設定する場面

Tomcatが起動するJavaVM(JVM)のメモリの割り当てを設定する場合に、CATALINA_OPTSを設定することになります。
メモリの割り当てが少ないと起動時、または、起動中にメモリリークなどが発生してプロセスが落ちてしまうので、割り当てのサイズを変更しておく必要性が出てくる場面があります。

CATALINA_OPTSに指定するパラメータは、とりあえず大体以下のあたりを設定しておけば大丈夫だと思います。
もちろん他にも細かくパラメータの設定はできますが、最初は以下を設定して改善されたか様子を見るのが良いでしょう。

-Xmx 最大ヒープサイズ(最大メモリ使用量)
-Xms 初期ヒープサイズ(初期メモリ使用量)
-Xss プロセスに割り当てられるスタックサイズ(228k以上必要になります)

Tomcatのインストール方法

wgetコマンドなどでソースコードをダウンロードしてからコンパイルする方法

詳細なインストール方法は別途記したいと思いますが、最初にコンパイルされる時はTomcatはデーモン化されておらず、startup.shやcatalina.shなどシェルで起動させることになります。
CATALINA_OPTSの設定に関しては、Tomcatの起動時にシェルファイルに記載されている設定値を読み込ませることになります。

記入するファイルとしてはcatalina.shやsetenv.shになりますが、環境変数はsetenv.shに書きましょう。
catalina.shの中に以下の記述がある通り、もしsetenv.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

上記の記述からもわかる通り、ファイルの場所としてはcatalina.shと同じディレクトリ上に置くことになります。
デフォルトではsetenv.shは存在しないため、自分で作成することになります。
※以下はtomcatバージョンが8.5.13の時のパターンです。

cd /opt/apache-tomcat-8.5.13/bin
vim setenv.sh

だいぶ省略はしていますが、例としてはこんな感じです。
※設定値は環境と要件に合わせて設定してください。

CATALINA_OPTS="-server -Xmx1024m -Xms1024m -Xss512k"
export CATALINA_OPTS

設定が反映されているか確認したい場合、プロセスを確認してください。

ps aux | grep tomcat

以下はプロセスの例です。

tomcat   23302  1.7 30.4 4193556 1862964 ?     Sl    2017 7778:07 /usr/java/jdk1.8.0_121/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-8.5.13/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xmx1024m -Xms1024m -Xss512k -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Djava.endorsed.dirs=/opt/apache-tomcat-8.5.13/endorsed -classpath /opt/apache-tomcat-8.5.13/bin/bootstrap.jar:/opt/apache-tomcat-8.5.13/bin/tomcat-juli.jar -Dcatalina.base=/opt/apache-tomcat-8.5.13 -Dcatalina.home=/opt/apache-tomcat-8.5.13 -Djava.io.tmpdir=/opt/apache-tomcat-8.5.13/temp org.apache.catalina.startup.Bootstrap start

この中に「/usr/lib/jvm/jre/bin/java -server -Xmx1024m -Xms1024m -Xss512k」という記述がありますよね。
これによって設定値が反映されていることが確認できました。

yumでインストールする方法

ここも詳細なインストール方法は別途記載しますが、yumでインストールした場合はTomcatはデーモン化されているため、サービス(プロセス)を起動すればOKです。
ただ、ソースをダウンロードした場合と異なり、yumでインストールした場合はcatalina.shファイルは作られません。
よって、ここでsetenv.shファイルを作成しても読み込まれないため、環境変数などが設定されているtomcat8.confファイルに記入してください。

vim /etc/tomcat8/tomcat8.conf

ファイルの一番下に以下のように記入してください。
※ここも設定値は環境と要件に合わせて設定してください。

CATALINA_OPTS="-server -Xmx1024m -Xms1024m -Xss512k"

あとはtomcatを再起動すれば反映されます。

設定が反映されているか確認したい場合、プロセスを確認してください。

ps aux | grep tomcat
tomcat   28652 61.9 33.0 2223808 336440 ?      Sl   13:36   0:42 /usr/lib/jvm/jre/bin/java -server -Xmx1024m -Xms1024m -Xss512k -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

この中に「/usr/lib/jvm/jre/bin/java -server -Xmx1024m -Xms1024m -Xss512k」という記述がありますよね。
これによって設定値が反映されていることが確認できました。

Java+MySQL+Tomcatで始めるWebアプリケーション構築入門

Java+MySQL+Tomcatで始めるWebアプリケーション構築入門

スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)

スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)