【問題解決】Tomcat:「Java Options」の改行以降の設定は反映されない


環境

  • Tomcat 8.5
  • Windows10
  • Java8

実現したいこと

GCログを出力したいです。
TomcatのJava Optionsに、GCログを出力する設定を定義します。
Java Optionsの設定は、tomcat8w.exeを開き、「Javaタブ→Java Options」で行います。

問題

Tomcatの「Java Options」に、GCログを出力するオプションを追記しました。
このとき、もともと設定されていたオプションと区別するため、改行を入れてしましました。

JavaOptions
-Dcatalina.home=C:\Program Files\Apache Software Foundation\Tomcat 8.5
-Dcatalina.base=C:\Program Files\Apache Software Foundation\Tomcat 8.5
-Djava.io.tmpdir=C:\Program Files\Apache Software Foundation\Tomcat 8.5\temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=C:\Program Files\Apache Software Foundation\Tomcat 8.5\conf\logging.properties

-verbose:gc
-Xloggc:/tmp/gclog_%t_%p.txt

「適用」ボタンを押して、Tomcatを再起動(stopボタンを押した後、startボタンを押す)しましたが、/tmpフォルダにGCログはありませんでした。
また、tomcat8w.exeを閉じて再度開いたところ、Java OptionsからGCログの設定が消えていました。

問題の確認

C:\Program Files\Apache Software Foundation\Tomcat 8.5\logsにあるcatalina.yyyy-mm-dd.logを確認しました。
「 Command line argument」の部分は、以下のようになっていました。
※ログを見やすくするため、先頭のタイムスタンプやクラス名を取り除きました。

catalina.2018-01-01.log
Command line argument: -Dcatalina.home=C:\Program Files\Apache Software Foundation\Tomcat 8.5
Command line argument: -Dcatalina.base=C:\Program Files\Apache Software Foundation\Tomcat 8.5
Command line argument: -Djava.io.tmpdir=C:\Program Files\Apache Software Foundation\Tomcat 8.5\temp
Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
Command line argument: -Djava.util.logging.config.file=C:\Program Files\Apache Software Foundation\Tomcat 8.5\conf\logging.properties
Command line argument: exit
Command line argument: abort
Command line argument: -Xms128m
Command line argument: -Xmx256m

-Djava.util.logging.config.fileの次は、exitabortで、GCログの設定はありませんでした。
どうやらJava Optionsに改行があると、そこで終了するようです。

解決策

Java Optionsから改行を取り除きました。

javaoptions
-Dcatalina.home=C:\Program Files\Apache Software Foundation\Tomcat 8.5
-Dcatalina.base=C:\Program Files\Apache Software Foundation\Tomcat 8.5
-Djava.io.tmpdir=C:\Program Files\Apache Software Foundation\Tomcat 8.5\temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=C:\Program Files\Apache Software Foundation\Tomcat 8.5\conf\logging.properties
-verbose:gc
-Xloggc:/tmp/gclog_%t_%p.txt

catalina-2018-01-01.log
Command line argument: -Dcatalina.home=C:\Program Files\Apache Software Foundation\Tomcat 8.5
Command line argument: -Dcatalina.base=C:\Program Files\Apache Software Foundation\Tomcat 8.5
Command line argument: -Djava.io.tmpdir=C:\Program Files\Apache Software Foundation\Tomcat 8.5\temp
Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
Command line argument: -Djava.util.logging.config.file=C:\Program Files\Apache Software Foundation\Tomcat 8.5\conf\logging.properties
Command line argument: -verbose:gc
Command line argument: -Xloggc:/tmp/gclog_%t_%p.txt
Command line argument: exit
Command line argument: abort
Command line argument: -Xms128m
Command line argument: -Xmx256m

catalina-yyyy-mm-dd.logには、GC Logの設定が記載されていました。
そして、/tmpフォルダにgclog_2018-01-01_15-39-23_pid18096.txtという名前のGCログが出力されました。

備考

当たり前なことかもしれませんが、Tomcat設定ダイアログの「適用」ボタンを押さないと、Java Optionの変更が反映されません。
私は、適用ボタンを押し忘れ、「なぜ反映されないんだ」と少し悩みました。

まとめ

TomcatのJava Optionsに改行を含めない。