Tomcat ウェブアプリケーションマネージャーの使い方
目次
はじめに
多くの本番環境では、Tomcatをシャットダウンして再起動することなく、ウェブアプリケーションを管理できる機能が非常に役立ちます。このドキュメントは、ウェブアプリケーションマネージャーのHTMLウェブインターフェースに関するものです。
インターフェースは6つのセクションに分かれています
- メッセージ - 成功および失敗メッセージを表示します。
- マネージャー - リスト表示やヘルプなどの一般的なマネージャー操作。
- アプリケーション - ウェブアプリケーションのリストとコマンド。
- デプロイ - ウェブアプリケーションのデプロイ。
- 診断 - 潜在的な問題の特定。
- サーバー情報 - Tomcatサーバーに関する情報。
メッセージ
実行した最後のウェブアプリケーションマネージャーコマンドの成功または失敗に関する情報を表示します。成功した場合はOKが表示され、成功メッセージが続くことがあります。失敗した場合はFAILが表示され、エラーメッセージが続きます。一般的な失敗メッセージは各コマンドの下に記載されています。各コマンドの失敗メッセージの完全なリストは、マネージャーウェブアプリケーションのドキュメントで確認できます。
マネージャー
マネージャーセクションには3つのリンクがあります
- アプリケーションをリスト表示 - ウェブアプリケーションのリストを再表示します。
- HTMLマネージャーヘルプ - このドキュメントへのリンク。
- マネージャーヘルプ - 包括的なマネージャーアプリケーションのハウツーへのリンク。
アプリケーション
アプリケーションセクションには、インストールされているすべてのウェブアプリケーションに関する情報が表示され、それらを管理するためのリンクが提供されます。各ウェブアプリケーションについて、以下が表示されます
- パス - ウェブアプリケーションのコンテキストパス。
- 表示名 - ウェブアプリケーションの「web.xml」ファイルに設定されている場合の表示名。
- 実行中 - ウェブアプリケーションが実行中で利用可能か(true)、または実行中でなく利用不可か(false)。
- セッション - このウェブアプリケーションのリモートユーザーのアクティブなセッション数。セッション数はリンクになっており、クリックするとメッセージボックスにウェブアプリケーションによるセッション使用状況の詳細が表示されます。
- コマンド - ウェブアプリケーションに対して実行できるすべてのコマンドをリスト表示します。実行可能なコマンドのみが送信可能なリンクとしてリスト表示されます。マネージャーウェブアプリケーション自体にはコマンドを実行できません。以下のコマンドが実行可能です
- 開始 - 停止していたウェブアプリケーションを開始します。
- 停止 - 現在実行中のウェブアプリケーションを停止し、利用不可にします。
- リロード - ウェブアプリケーションをリロードし、
/WEB-INF/lib/
内の新しい「.jar」ファイルや/WEB-INF/classes/
内の新しいクラスが使用できるようにします。 - アンデプロイ - このウェブアプリケーションを停止し、サーバーから削除します。
開始
停止したアプリケーションに再起動を指示し、再度利用可能にします。停止と開始は、例えば、アプリケーションが必要とするデータベースが一時的に利用できなくなった場合に役立ちます。ユーザーに継続的にデータベース例外を発生させるよりも、このデータベースに依存するウェブアプリケーションを停止する方が通常は良い方法です。
このコマンドが成功した場合、次のようなメッセージが表示されます
OK - Started application at context path /examples
それ以外の場合、メッセージはFAIL
で始まり、エラーメッセージが含まれます。問題の考えられる原因には次のようなものがあります
- 例外が発生しました
ウェブアプリケーションの開始中に例外が発生しました。詳細についてはTomcatのログを確認してください。
- 無効なコンテキストパスが指定されました
コンテキストパスはスラッシュ文字で始まる必要があります。ただし、ROOTウェブアプリケーションを参照している場合は、コンテキストパスはゼロ長文字列である必要があります。
- パス /foo にコンテキストが存在しません
指定されたコンテキストパスにデプロイされたアプリケーションはありません。
- コンテキストパスが指定されていません
path
パラメーターは必須です。
停止
既存のアプリケーションに自身を利用不可にするよう指示しますが、デプロイ状態は維持します。アプリケーションが停止している間に受信したリクエストはHTTPエラー404となり、このアプリケーションはリスト表示コマンドで「停止中」と表示されます。
このコマンドが成功した場合、次のようなメッセージが表示されます
OK - Stopped application at context path /examples
それ以外の場合、メッセージはFAIL
で始まり、エラーメッセージが含まれます。問題の考えられる原因には次のようなものがあります
- 例外が発生しました
ウェブアプリケーションの停止中に例外が発生しました。詳細についてはTomcatのログを確認してください。
- 無効なコンテキストパスが指定されました
コンテキストパスはスラッシュ文字で始まる必要があります。ただし、ROOTウェブアプリケーションを参照している場合は、コンテキストパスはゼロ長文字列である必要があります。
- パス /foo にコンテキストが存在しません
指定されたコンテキストパスにデプロイされたアプリケーションはありません。
- コンテキストパスが指定されていません
path
パラメーターは必須です。
リロード
既存のアプリケーションに自身をシャットダウンしてリロードするよう指示します。これは、ウェブアプリケーションコンテキストがリロード可能でない場合に、/WEB-INF/classes
ディレクトリ内のクラスまたはプロパティファイルを更新したり、/WEB-INF/lib
ディレクトリ内のjarファイルを追加または更新したりした場合に役立ちます。
注意: /WEB-INF/web.xml
ウェブアプリケーション設定ファイルはリロード時にチェックされません。以前のweb.xml設定が使用されます。web.xmlファイルに変更を加えた場合は、ウェブアプリケーションを停止してから開始する必要があります。
このコマンドが成功した場合、次のようなメッセージが表示されます
OK - Reloaded application at context path /examples
それ以外の場合、メッセージはFAIL
で始まり、エラーメッセージが含まれます。問題の考えられる原因には次のようなものがあります
- 例外が発生しました
ウェブアプリケーションの再起動中に例外が発生しました。詳細についてはTomcatのログを確認してください。
- 無効なコンテキストパスが指定されました
コンテキストパスはスラッシュ文字で始まる必要があります。ただし、ROOTウェブアプリケーションを参照している場合は、コンテキストパスはゼロ長文字列である必要があります。
- パス /foo にコンテキストが存在しません
指定されたコンテキストパスにデプロイされたアプリケーションはありません。
- コンテキストパスが指定されていません
path
パラメーターは必須です。 - パス /foo にデプロイされたWARではリロードはサポートされていません
現在、ウェブアプリケーションがWARファイルから直接インストールされている場合(ホストがWARファイルを展開しないように設定されている場合に発生)、アプリケーションのリロード(クラスまたは
web.xml
ファイルへの変更を反映するため)はサポートされていません。これは展開されたディレクトリからウェブアプリケーションがインストールされている場合にのみ機能するため、WARファイルを使用している場合は、変更を反映させるためにアプリケーションをアンデプロイ
してから再度デプロイ
する必要があります。
アンデプロイ
警告 - このコマンドは、この仮想ホストのappBase
ディレクトリ(通常「webapps」)内にウェブアプリケーションディレクトリおよび/または「.war」ファイルが存在する場合、その内容を削除します。ウェブアプリケーションの一時作業ディレクトリも削除されます。単にアプリケーションをサービスから外したい場合は、/stop
コマンドを使用してください。
既存のアプリケーションに優雅にシャットダウンするよう指示し、Tomcatから削除します(これにより、このコンテキストパスは後で再利用できるようになります)。このコマンドは、/deploy
Antコマンド、およびHTMLマネージャーで利用可能な関連するデプロイ機能の論理的な反対です。
このコマンドが成功した場合、次のようなメッセージが表示されます
OK - Undeployed application at context path /examples
それ以外の場合、メッセージはFAIL
で始まり、エラーメッセージが含まれます。問題の考えられる原因には次のようなものがあります
- 例外が発生しました
ウェブアプリケーションのアンデプロイ中に例外が発生しました。詳細についてはTomcatのログを確認してください。
- 無効なコンテキストパスが指定されました
コンテキストパスはスラッシュ文字で始まる必要があります。ただし、ROOTウェブアプリケーションを参照している場合は、コンテキストパスはゼロ長文字列である必要があります。
- パス /foo にコンテキストが存在しません
指定されたコンテキストパスにデプロイされたアプリケーションはありません。
- コンテキストパスが指定されていません
path
パラメーターは必須です。
デプロイ
ウェブアプリケーションは、Tomcatサーバー上にあるファイルまたはディレクトリを使用してデプロイできます。また、ウェブアプリケーションアーカイブ(WAR)ファイルをサーバーにアップロードすることもできます。
アプリケーションをインストールするには、実行したいインストールの種類に応じた適切なフィールドに入力し、インストールボタンを使用して送信します。
サーバー上にあるディレクトリまたはWARファイルをデプロイ
指定されたコンテキストパス:(他のウェブアプリケーションによって使用されていない必要があります)に紐付けられた新しいウェブアプリケーションをデプロイして開始します。このコマンドは、アンデプロイコマンドの論理的な反対です。
デプロイコマンドにはいくつかの異なる使用方法があります。
URLでディレクトリまたはWARをデプロイ
Tomcatサーバー上にあるウェブアプリケーションディレクトリまたは「.war」ファイルをインストールします。コンテキストパスが指定されていない場合、ディレクトリ名または「.war」拡張子なしのWARファイル名がパスとして使用されます。WARまたはディレクトリのURLは、ディレクトリまたはウェブアプリケーションアーカイブ(WAR)ファイルのURL(file:
スキームを含む)を指定します。WARファイルを参照するURLのサポートされる構文は、java.net.JarURLConnection
クラスのJavadocページで説明されています。WARファイル全体を参照するURLのみを使用してください。
この例では、Tomcatサーバー(Windows上で実行中)のディレクトリC:\path\to\foo
にあるウェブアプリケーションが、/footoo
という名前のウェブアプリケーションコンテキストとしてデプロイされます。
Context Path: /footoo
WAR or Directory URL: file:C:/path/to/foo
この例では、Tomcatサーバー(Unix上で実行中)の「.war」ファイル/path/to/bar.war
が、/bar
という名前のウェブアプリケーションコンテキストとしてデプロイされます。path
パラメーターがないため、コンテキストパスは「.war」拡張子なしのウェブアプリケーションアーカイブファイル名にデフォルトで設定されることに注意してください。
WAR or Directory URL: jar:file:/path/to/bar.war!/
ホストのappBaseからディレクトリまたはWARをデプロイ
ホストのappBaseディレクトリにあるウェブアプリケーションディレクトリまたは「.war」ファイルをインストールします。コンテキストパスが指定されていない場合、ディレクトリ名または「.war」拡張子なしのWARファイル名がパスとして使用されます。
この例では、TomcatサーバーのホストappBaseディレクトリ内のfoo
という名前のサブディレクトリにあるウェブアプリケーションが、/foo
という名前のウェブアプリケーションコンテキストとしてデプロイされます。path
パラメーターがないため、コンテキストパスはウェブアプリケーションディレクトリ名にデフォルトで設定されることに注意してください。
WAR or Directory URL: foo
この例では、TomcatサーバーのホストappBaseディレクトリにある「.war」ファイルbar.war
が、/bartoo
という名前のウェブアプリケーションコンテキストとしてデプロイされます。
Context Path: /bartoo
WAR or Directory URL: bar.war
コンテキスト設定「.xml」ファイルを使用してデプロイ
ホストのdeployXML
フラグがtrueに設定されている場合、コンテキスト設定「.xml」ファイルとオプションの「.war」ファイルまたはウェブアプリケーションディレクトリを使用してウェブアプリケーションをインストールできます。コンテキスト「.xml」設定ファイルを使用してウェブアプリケーションをインストールする場合、コンテキストパスは使用されません。
コンテキスト設定「.xml」ファイルには、Tomcatのserver.xml
設定ファイルで設定されているかのように、ウェブアプリケーションコンテキストの有効なXMLを含めることができます。Windows上で実行されているTomcatの例を次に示します
<Context path="/foobar" docBase="C:\path\to\application\foobar">
</Context>
WARまたはディレクトリのURLの使用はオプションです。ウェブアプリケーションの「.war」ファイルまたはディレクトリを選択するために使用された場合、コンテキスト設定「.xml」ファイルで設定されたdocBaseを上書きします。
以下は、Windows上で実行されているTomcatのコンテキスト設定「.xml」ファイルを使用してアプリケーションをインストールする例です。
XML Configuration file URL: file:C:/path/to/context.xml
以下は、コンテキスト設定「.xml」ファイルとサーバー上にあるウェブアプリケーション「.war」ファイル(Unix上で実行されているTomcat)を使用してアプリケーションをインストールする例です。
XML Configuration file URL: file:/path/to/context.xml
WAR or Directory URL: jar:file:/path/to/bar.war!/
インストールするWARファイルをアップロード
ローカルシステムからWARファイルをアップロードし、ホストのappBaseにインストールします。「.war」拡張子なしのWARファイル名がコンテキストパス名として使用されます。
参照ボタンを使用して、ローカルデスクトップシステムからサーバーにアップロードするWARファイルを選択します。
.WARファイルには、/META-INF/context.xml
にコンテキスト設定XMLファイルを含めることで、Tomcat固有のデプロイメント設定を含めることができます。
WARファイルのアップロードは、以下の理由で失敗する可能性があります
- アップロードされたファイルは.warである必要があります
アップロードによるインストールは、「.war」のファイル名拡張子を持つファイルのみを受け入れます。
- WARファイルがサーバーに既に存在します
同じ名前のWARファイルがホストのappBaseに既に存在する場合、アップロードは失敗します。既存のWARファイルをホストのappBaseからアンデプロイするか、異なる名前を使用して新しいWARファイルをアップロードしてください。
- ファイルのアップロードに失敗しました、ファイルがありません
ファイルのアップロードに失敗しました。サーバーでファイルが受信されませんでした。
- インストールアップロード失敗、例外
WARファイルのアップロードまたはインストールがJava例外で失敗しました。例外メッセージがリスト表示されます。
デプロイに関する注意
ホストがunpackWARs=true
で設定されており、WARファイルをインストールする場合、WARはホストのappBaseディレクトリ内のディレクトリに展開されます。
アプリケーションのWARまたはディレクトリがホストのappBaseディレクトリにデプロイされており、ホストがautoDeploy=true
に設定されている場合、コンテキストパスはディレクトリ名または「.war」拡張子なしのWARファイル名と一致する必要があります。
信頼できないユーザーがウェブアプリケーションを管理できる場合のセキュリティのため、ホストのdeployXML
フラグをfalseに設定できます。これにより、信頼できないユーザーが設定XMLファイルを使用してウェブアプリケーションをインストールしたり、ホストのappBase外にあるアプリケーションディレクトリや「.war」ファイルをインストールしたりすることを防ぎます。
デプロイメッセージ
デプロイと起動が成功した場合、次のようなメッセージが表示されます
OK - Deployed application at context path /foo
それ以外の場合、メッセージはFAIL
で始まり、エラーメッセージが含まれます。問題の考えられる原因には次のようなものがあります
- アプリケーションはパス /foo に既に存在します
現在実行中のすべてのウェブアプリケーションのコンテキストパスは一意である必要があります。したがって、このコンテキストパスを使用している既存のウェブアプリケーションをアンデプロイするか、新しいウェブアプリケーションに別のコンテキストパスを選択する必要があります。
- ドキュメントベースが存在しないか、読み取り可能なディレクトリではありません
WARまたはディレクトリのURL:フィールドで指定されたURLは、このサーバー上の「展開された」バージョンのウェブアプリケーションを含むディレクトリ、またはこのアプリケーションを含むウェブアプリケーションアーカイブ(WAR)ファイルの絶対URLを識別する必要があります。WARまたはディレクトリのURL:フィールドに入力された値を修正してください。
- 例外が発生しました
新しいウェブアプリケーションの開始中に例外が発生しました。詳細についてはTomcatのログを確認してください。ただし、考えられる原因としては、
/WEB-INF/web.xml
ファイルの解析問題、またはアプリケーションイベントリスナーやフィルターの初期化時に遭遇したクラスの欠落などがあります。 - 無効なアプリケーションURLが指定されました
指定されたWARまたはディレクトリのURL:フィールドのURLは無効でした。このようなURLは
file:
で始まり、WARファイルのURLは「.war」で終わる必要があります。 - 無効なコンテキストパスが指定されました
コンテキストパスはスラッシュ文字で始まる必要があります。ただし、ROOTウェブアプリケーションを参照している場合は、コンテキストパスは「/」文字列である必要があります。
- コンテキストパスはディレクトリまたはWARファイル名と一致する必要があります
アプリケーションのWARまたはディレクトリがホストのappBaseディレクトリにデプロイされており、ホストが
autoDeploy=true
に設定されている場合、コンテキストパスはディレクトリ名または「.war」拡張子なしのWARファイル名と一致する必要があります。 - ホストのウェブアプリケーションディレクトリ内のウェブアプリケーションのみデプロイ可能です
ホストの
deployXML
フラグがfalseに設定されている場合、ホストのappBaseディレクトリ外にウェブアプリケーションディレクトリまたは「.war」ファイルをインストールしようとすると、このエラーが発生します。
診断
メモリリークの発見
「メモリリークの発見」診断は、完全なガベージコレクションをトリガーします。本番システムでの使用は極めて慎重に行う必要があります。
「メモリリークの発見」診断は、停止、リロード、またはアンデプロイされた際にメモリリークを引き起こしたウェブアプリケーションを特定しようとします。結果は常にプロファイラで確認する必要があります。この診断は、StandardHost実装によって提供される追加機能を使用します。StandardHostを拡張しないカスタムホストを使用している場合は機能しません。
この診断では、停止、リロード、またはアンデプロイされたウェブアプリケーションのコンテキストパスがリスト表示されますが、以前の実行からのクラスがまだメモリ内に存在し、メモリリークとなっているものが対象です。アプリケーションが複数回リロードされた場合、複数回リストされる可能性があります。
Javaコードから明示的に完全なガベージコレクションをトリガーすることは、信頼できないとされています。さらに、使用するJVMによっては、-XX:+DisableExplicitGC
のように明示的なGCトリガーを無効にするオプションがあります。診断が正常に完全なGCを実行したことを確認したい場合は、GCロギング、JConsoleなどのツールを使用して確認する必要があります。
サーバー情報
このセクションでは、Tomcat、Tomcatがホストされているサーバーのオペレーティングシステム、Tomcatが実行されているJava仮想マシン、サーバーのプライマリホスト名(Tomcatへのアクセスに使用されるホスト名とは異なる場合があります)、およびサーバーのプライマリIPアドレス(Tomcatへのアクセスに使用されるIPアドレスとは異なる場合があります)に関する情報を表示します。