本日もTomcatの話題です。Windowsで動くTomcatのメモリの設定変更についてです。
以前、Tomcat上で動作するWebアプリケーションでOutOfMemoryエラーが頻発しました。
そのため、メモリサイズを上げなければという話になりました。メモリの設定変更なんてWebにたくさん情報があるから簡単だよな~と思っていたら、実際には思っていたほど簡単ではありませんでした。
Linuxで動くTomcatのメモリ変更の情報はたくさんあるのですが、Windowsで動くTomcatのメモリ設定変更の情報があまりありませんでした。
欲しい情報に近そうなものはちらほら見つかりましたが、正直よくわからなかった(ここは私の理解不足かもしれません)ので少々調査したのが本記事を書こうと思ったきっかけです。同じような境遇の方がいましたら、お読みいただければ幸いです。
Tomcatの起動メモリの確認
まずはメモリ変更の前に、現在起動しているTomcatのメモリってどうやって確認するのかを見ていきたいと思います。
ちなみに、以下の内容はTomcatがWindows上にすでにインストールされていて、サービスとして起動していることが前提になります。また動作確認をしたTomcatのバージョンは8です。TomcatをWindowsにサービスとしてインストールする記事がありますので、まだの方はそちらをご参照いただければと思います。
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」は、WindowsでTomcatの設定変更を行うためのGUIのユーティリティです。Windowsではこれを使うことで、前述のメモリの変更やその他作業を行うことができます。Linuxではシェルの中身を修正したりしますが、Windowsではこちらを使います。
使い方は簡単です。「Tomcat8w.exe」をダブルクリックして起動します。以下のような小さい窓が開くと思います。
設定内容によってタブが分かれています。今回のヒープメモリは「Java」タブになるのでそちらを開きます。なにやらたくさん設定できそうですが、今回は一番下のあたりを見てみてください。「Initial memory pool」「Maximum memory pool」が見えると思います。この横の数値に見覚えあると思います。そうです、先ほどTomcatの起動ログに出力されていた数値です。先ほどの内容を補足すると以下のようになります。
- Xms ・・・ ヒープメモリの初期サイズ(Initial memory pool)
- Xmx ・・・ ヒープメモリの最大サイズ(Maximum memory pool)
ではそれぞれ値を修正してみましょう。今回は仮で適当な数値(xms=118、xmx=245)をそれぞれ入力してみました。変更したら必ず「適用」ボタンを押下してください。その後、「OK」ボタン押下することで、小さい窓が閉じます。
変更した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画面とか出てこないんですよね。コマンドラインで起動して設定する方法は乗っているようですが、見方が悪いのでしょうか?それとも載せていないだけなんでしょうか?少し苦戦したので気になるところです。
本日も最後までお読みいただきありがとうございました。今回はこのへんで。