ITエンジニアの成長ブログ

ITエンジニアとして行う勉強の発信&日々の生活で体験した楽しいことをゆるく発信

Windowsで動くTomcatの起動メモリの設定

本日もTomcatの話題です。Windowsで動くTomcatのメモリの設定変更についてです。

以前、Tomcat上で動作するWebアプリケーションでOutOfMemoryエラーが頻発しました。
そのため、メモリサイズを上げなければという話になりました。メモリの設定変更なんてWebにたくさん情報があるから簡単だよな~と思っていたら、実際には思っていたほど簡単ではありませんでした。

Linuxで動くTomcatのメモリ変更の情報はたくさんあるのですが、Windowsで動くTomcatのメモリ設定変更の情報があまりありませんでした。

欲しい情報に近そうなものはちらほら見つかりましたが、正直よくわからなかった(ここは私の理解不足かもしれません)ので少々調査したのが本記事を書こうと思ったきっかけです。同じような境遇の方がいましたら、お読みいただければ幸いです。

Tomcatの起動メモリの確認

まずはメモリ変更の前に、現在起動しているTomcatのメモリってどうやって確認するのかを見ていきたいと思います。

ちなみに、以下の内容はTomcatWindows上にすでにインストールされていて、サービスとして起動していることが前提になります。また動作確認をしたTomcatのバージョンは8です。TomcatWindowsにサービスとしてインストールする記事がありますので、まだの方はそちらをご参照いただければと思います。
TomcatをWindowsサービスとしてインストールする - ITエンジニアの成長ブログ

では、メモリの確認方法ですがこれはとっても単純です。Tomcatがインストールしてある場所(TOMCAT_HOME)に、/logsフォルダがあると思います。

そこに、catalina.2020-09-08.log(2020年09月08日の場合)のようなログファイルがあると思います。これは、Tomcatの起動時のログが出力されているログファイルです。
これを確認しましょう。一部省略していますが、以下のようなログが出力されていると思います。

08-Sep-2020 00:42:39.364 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Serverのバージョン名:Apache Tomcat/8.5.57
(省略)★★★★★★★★★★★★★★
08-Sep-2020 00:42:39.474 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log コマンドライン引数:-Xms128m
08-Sep-2020 00:42:39.474 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log コマンドライン引数:-Xmx256m
(省略)★★★★★★★★★★★★★★
08-Sep-2020 00:42:46.119 情報 [main] org.apache.catalina.startup.Catalina.start Server startup in 3916 ms


真ん中の”コマンドライン引数”の記載がある行に注目してください。2つのキーワード「-Xms128m」「-Xmx256m」とあります。これはそれぞれ以下の意味です。「-Xms」がTomcat起動時に確保する初期メモリサイズで、「-Xmx」がTomcat起動後の最大メモリサイズです。「ヒープメモリ」とはなんでしょうか。と言われると私も詳しくないのであれですが、Javaのクラスのインスタンスなどがロードされるメモリ空間のことのようです(ここらへんも詳しくなりたいものです・・・)。

  • Xms ・・・ ヒープメモリの初期サイズ
  • Xmx ・・・ ヒープメモリの最大サイズ

実は他にもたくさんオプションがあるようなのですが、結構難しそうなのでここでは割愛します・・・
Tomcatのヒープメモリの初期サイズ、最大サイズを確認できたところで今回はこの2つの数値を変更してみましょう。

Tomcatのヒープメモリの初期サイズ・最大サイズを変更しよう

上記までで、Tomcatのヒープメモリの初期サイズと最大サイズが確認できました。それでは、本題の設定変更をしてみましょう。
Tomcatがインストールしている場所(TOMCAT_HOME)に、/binフォルダがあると思います。ここにはTomcatのユーティリティが格納されているのですが、注目すべきは「Tomcat8w.exe」という実行ファイルです。ファイル名が1文字異なる「Tomcat8.exe」というファイルもあるので、ご注意ください。

「Tomcat8w.exe」は、WindowsTomcatの設定変更を行うためのGUIのユーティリティです。Windowsではこれを使うことで、前述のメモリの変更やその他作業を行うことができます。Linuxではシェルの中身を修正したりしますが、Windowsではこちらを使います。

使い方は簡単です。「Tomcat8w.exe」をダブルクリックして起動します。以下のような小さい窓が開くと思います。

f:id:mr_star:20200908012008p:plain
Tomcat設定変更画面

設定内容によってタブが分かれています。今回のヒープメモリは「Java」タブになるのでそちらを開きます。なにやらたくさん設定できそうですが、今回は一番下のあたりを見てみてください。「Initial memory pool」「Maximum memory pool」が見えると思います。この横の数値に見覚えあると思います。そうです、先ほどTomcatの起動ログに出力されていた数値です。先ほどの内容を補足すると以下のようになります。

  • Xms ・・・ ヒープメモリの初期サイズ(Initial memory pool)
  • Xmx ・・・ ヒープメモリの最大サイズ(Maximum memory pool)
f:id:mr_star:20200908012151p:plain
Tomcat設定変更画面②

ではそれぞれ値を修正してみましょう。今回は仮で適当な数値(xms=118、xmx=245)をそれぞれ入力してみました。変更したら必ず「適用」ボタンを押下してください。その後、「OK」ボタン押下することで、小さい窓が閉じます。

f:id:mr_star:20200908012604p:plain
Tomcat設定変更画面③

変更したTomcatのヒープメモリの初期サイズ・最大サイズを確認しよう

ここまでで、Tomcatのヒープメモリの初期サイズ・最大サイズの設定変更ができたと思います。

しかし、このままではTomcatにはまだ反映されません。反映するにはTomcatの再起動が必要です。Windowsのサービスから再起動してみましょう(サービスを開き、Tomcatを右クリック→再起動を押下)。

配置しているアプリのサイズにもよりますが、再起動自体はすぐに完了します。それでは、さきほどと同様にTomcatの起動時のログファイル((例)catalina.2020-09-08.log)を確認しましょう。再起動した時間にログがたくさん出力されていると思います。先ほどと同様の箇所に注目してみてください。

設定変更した値がちゃんとログ出力されています。このメモリ設定で起動されていることが確認できました。

08-Sep-2020 01:29:49.310 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Serverのバージョン名:Apache Tomcat/8.5.57
(省略)★★★★★★★★★★★★★★
08-Sep-2020 01:29:49.341 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log コマンドライン引数:-Xms118m
08-Sep-2020 01:29:49.341 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log コマンドライン引数:-Xmx245m
(省略)★★★★★★★★★★★★★★
08-Sep-2020 01:29:58.560 情報 [main] org.apache.catalina.startup.Catalina.start Server startup in 6757 ms

おわりに

今回はTomcatのヒープメモリの設定を変更してみました。GUIで変更できるので簡単でしたね。

本格的にTomcatのチューニングをする場合は、他にもたくさんあるオプションを設定する必要がありそうですが、そこは必要に応じてこれから勉強していきたいところです(本当にバリバリ設定している人はいるのだろうか・・・)。

冒頭にも書きましたが、このような情報はLinuxがメインなのかWebで検索してもあまりWindowsの情報がないんですよね。サーバー運用はやはり、Linuxがシェア多いのでしょうか?ここらへんもどこかに統計ありそうですよね。今度探してみます。

あ、あとTomcat公式サイトとか見てもこのGUI画面とか出てこないんですよね。コマンドラインで起動して設定する方法は乗っているようですが、見方が悪いのでしょうか?それとも載せていないだけなんでしょうか?少し苦戦したので気になるところです。

本日も最後までお読みいただきありがとうございました。今回はこのへんで。