TT Lab
はじめる
学ぶ 学習パス コース

Tomcat & nginxの運用

Tomcatを起動し構造を掴む

TT Labで続きを見る

目標

systemdなしでTomcatを起動・停止し、ディレクトリ構造とリッスンポートを把握し、setenv.shでJVMオプションを注入して、実際に適用されたかをプロセスから確認できるようになります。

なぜ重要なのか

SI現場のサーバーは、ベンダーが渡したtar.gzを展開して使う場合が多く、コンテナ環境にはsystemdがありません。そのため、catalina.shを直接扱う能力が基本スキルになります。もう1つ、「プロセスは立ち上がっているのに、ポートが開いていない状態」が実際に存在します。ポートの競合やコネクターの初期化失敗のときに、そうなります。起動の確認を、プロセスではなくログとポートで行う習慣は、このラボで身に付きます。

ステップ

  1. /root/tcディレクトリを作成して、java -versionの出力を/root/tc/java.txtに保存します。(標準エラー出力まで含める必要があります。)
  2. /root/tc/layout.csvを作成します。1行目はdir,purposeです。bin、conf、lib、logs、webapps、work、tempの7行が必要で、purposeはそれぞれ8文字以上である必要があります。
  3. /opt/tomcat/bin/catalina.sh startでTomcatを起動します。http://127.0.0.1:8080/がHTTP 200を返す必要があります。
  4. /opt/tomcat/logs/catalina.outから起動にかかった時間(ミリ秒)を見つけて、数字だけを/root/tc/startup.txtに保存します。
  5. 現在LISTEN中のポートのうち、Tomcatが開いたポートを、1行に1つずつ昇順で/root/tc/ports.txtに保存します。
  6. /opt/tomcat/webapps/hello/index.htmlを作成して、本文にLabHubという文字列を入れます。http://127.0.0.1:8080/hello/が200で、本文にLabHubがある必要があります。
  7. Tomcatを停止してから、もう一度起動します。(catalina.sh stop 30 -forceのあと、catalina.sh start)再起動後も、http://127.0.0.1:8080/hello/が200である必要があります。
  8. /opt/tomcat/bin/setenv.shを作成して、次のオプションをCATALINA_OPTSとして定義し、再起動します。オプションは-Xms256m -Xmx256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/tc/dumpです。/root/tc/dumpディレクトリも、事前に作っておいてください。実行中のJavaプロセスの引数に、これらのオプションが実際に見えて初めて合格です。

参考

JDKバージョンの確認

/root/tcディレクトリを作成して、java -versionの出力を/root/tc/java.txtに保存します。(標準エラー出力まで含める必要があります。)

java -versionは、出力が標準エラー出力に出ます。ファイルに保存するには、リダイレクトに注意してください。

ディレクトリの役割の整理

/root/tc/layout.csvを作成します。1行目はdir,purposeです。bin、conf、lib、logs、webapps、work、tempの7行が必要で、purposeはそれぞれ8文字以上である必要があります。

各ディレクトリが何を収めているかを、1行で書きます。workとtempの違い、libとwebapps/*/WEB-INF/libの違いを区別してみてください。

Tomcatの起動

/opt/tomcat/bin/catalina.sh startでTomcatを起動します。http://127.0.0.1:8080/がHTTP 200を返す必要があります。

systemctlは、この環境にはありません。bin以下の起動スクリプトを直接実行してください。起動は非同期なので、すぐにcurlすると失敗することがあります。

起動所要時間の確認

/opt/tomcat/logs/catalina.outから起動にかかった時間(ミリ秒)を見つけて、数字だけを/root/tc/startup.txtに保存します。

catalina.outに「Server startup in [N] milliseconds」の形の行が残ります。数字だけを抜き出す必要があるので、grepのあとにsedやawkを付けてください。

リッスンポートの確認

現在LISTEN中のポートのうち、Tomcatが開いたポートを、1行に1つずつ昇順で/root/tc/ports.txtに保存します。

ss -ltnで、現在LISTEN状態のポートを見ます。サービスポート以外に、もう1つ開いているはずで、それが何かが、このステップの核心です。

静的コンテキストのデプロイ

/opt/tomcat/webapps/hello/index.htmlを作成して、本文にLabHubという文字列を入れます。http://127.0.0.1:8080/hello/が200で、本文にLabHubがある必要があります。

webappsの下にディレクトリを作ると、その名前がコンテキストパスになります。WARがなくてもデプロイできます。

停止後の再起動

Tomcatを停止してから、もう一度起動します。(catalina.sh stop 30 -forceのあと、catalina.sh start)再起動後も、http://127.0.0.1:8080/hello/が200である必要があります。

停止スクリプトに、待機時間と-forceを与える習慣を付けてください。再起動が実際に起きたかは、catalina.outの起動ログの件数で確認できます。

setenv.shでJVMオプションを注入する

/opt/tomcat/bin/setenv.shを作成して、次のオプションをCATALINA_OPTSとして定義し、再起動します。オプションは-Xms256m -Xmx256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/tc/dumpです。/root/tc/dumpディレクトリも、事前に作っておいてください。実行中のJavaプロセスの引数に、これらのオプションが実際に見えて初めて合格です。

catalina.shを直接直すと、Tomcatのアップグレードのときに消えます。bin/setenv.shを作ってCATALINA_OPTSを定義し、反映されるには再起動が必要です。実際に反映されたかは、プロセスの実行引数で確認してください。