Tomcatが起動しない原因と確認方法|ログ・Java・ポートを点検
掲載日:
更新日:
INFORMATION > Tomcatが起動しない原因と確認方法|ログ・Java・ポートを点検
結論:Tomcatが起動しないときは、まずコンソールとlogs内の最初の例外を確認し、Java版、JAVA_HOME・JRE_HOME、ポート、サービス、権限、設定XMLの順に切り分けると原因を絞れます。
この記事の対象と位置付け:Tomcat 9系で起動スクリプトがすぐ終了する事例を基にしたトラブルシューティング記事です。
2026年時点の注意:必要なJava版はTomcat系列で異なります。2026年時点ではTomcat 9はJava 8以上、10.1はJava 11以上、11はJava 17以上が必要です。利用系列の公式互換表を先に確認してください。
概要
startup.batやstartup.shを実行してもTomcatが起動しない場合の確認順を説明します。本文の具体例はTomcat 9.0.27を使った当時の記録ですが、環境変数、Java要件、ポート競合、ログ、サービス、権限、設定XMLを切り分ける考え方は現行環境でも利用できます。
目次
- Tomcatが起動しない原因と確認順
- 1-1. JAVA_HOMEが設定されていない
- 1-2. JAVAのバージョンがTomcatに対応していない
- 1-3. JRE_HOMEが有効となっている
- 1-4. ポート番号が競合している
- 1-5. catalina.out・logsの最初の例外を確認する
- 1-6. systemd・Windowsサービス・実行権限を確認する
- 1-7. server.xmlなどの設定XMLを確認する
- 1-8. Eclipse上でTomcatが起動しない場合
- まとめ
1. Tomcatが起動しない原因と確認順
起動直後に画面が閉じる場合も、最初にstartup.batやstartup.shをコンソールから実行し、表示された最初の例外を確認します。サービス起動ではTomcatのlogsディレクトリやOS側のサービスログを確認してから、次の原因を順に切り分けます。
1-1. JAVA_HOMEが設定されていない
【原因】
JAVA_HOME、もしくは、JRE_HOMEが設定されていない場合は以下のエラーが出力されます。
C:\Users\user>C:\apache-tomcat-9.0.27\bin\startup.bat
The JRE_HOME environment variable is not defined correctly
This environment variable is needed to run this program
【対処方法】
JAVA_HOME、もしくは、JRE_HOMEを「システムのプロパティ⇒詳細設定⇒環境変数」から設定しましょう。正しく設定できるとコマンドプロンプトで「echo %JAVA_HOME%」「echo %JRE_HOME%」などと打つと以下の様に出力されます。注意点として環境変数を変更した場合はコマンドプロンプトを再起動してください。コマンドプロンプトを起動時に環境変数は読み込まれます。
C:\Users\user>echo %JAVA_HOME%
C:\Program Files (x86)\Java\jdk-11
1-2. JAVAのバージョンがTomcatに対応していない
【原因】
TomcatはサポートしているJavaのバージョンがあります。以下のTomcatのサイトに記載されています。
https://tomcat.apache.org/whichversion.html
例えばTomcatのバージョン「9.0.27」の場合、上記サイトの「Apache Tomcat Version」の「9.0.x」となるので、「8 and later」となります。
つまりJava8以降を設定すると動作します。
【対処方法】
以下のTomcatのサイトを元に対応するJavaに環境変数を書き換えます。
https://tomcat.apache.org/whichversion.html
1-3. JRE_HOMEが有効となっている
【原因】
Tomcatは「JRE_HOME」「JAVA_HOME」が設定されている場合は「JRE_HOME」の方が有効となります。「JAVA_HOME」を見てTomcatに対応するJavaとなっていても「JRE_HOME」の方が動くので「JRE_HOME」の方がTomcatに対応するJavaとなっていないといけません。
【対処方法】
「システムのプロパティ⇒詳細設定⇒環境変数」からJRE_HOMEのJavaをTomcatに対応するJavaに書き換えます。
1-4. ポート番号が競合している
【原因】
Tomcatはデフォルトで8080ポートで起動します。他に8080ポートで起動しているアプリがあると以下の様なエラーが出力されます。
重大 [main] org.apache.catalina.util.LifecycleBase.handleSubClassException コンポーネント[Connector[HTTP/1.1-8080]] の初期化に失敗しました。
【対処方法】
Tomcatのポート変更、もしくは、競合して起動しているポート番号のアプリを停止する。
以下のコマンドを実行するとポート番号が競合しているか分かります。"8080"の部分は自身の環境に合わせてください。何も設定を変えていない場合は8080となります。何も起動されていない場合は、何もレスポンスが返ってこないです。
※以下のコマンドはWindowsとなります。
C:\Users\user>netstat -nao | find "8080"
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 5748
TCP [::]:8080 [::]:0 LISTENING 5748
TCP [::1]:8080 [::1]:58259 TIME_WAIT 0
TCP [::1]:8080 [::1]:58260 TIME_WAIT 0
TCP [::1]:8080 [::1]:58261 TIME_WAIT 0
1-5. catalina.out・logsの最初の例外を確認する
startup.shは起動処理を開始した後にシェルへ制御を返すため、コマンドが終了してもTomcat本体が正常起動したとは限りません。LinuxではCATALINA_BASE配下のlogsとcatalina.out、Windowsではコンソールやlogsを確認し、連続する例外の末尾だけでなく最初の「Caused by」付近から原因を追います。
1-6. systemd・Windowsサービス・実行権限を確認する
startup.shでは起動できるのにsystemdやserviceから起動できない場合は、サービスに設定された実行ユーザー、JAVA_HOME、CATALINA_HOME、CATALINA_BASEが対話シェルと同じか確認します。Tomcatのディレクトリやログ、PIDファイルへ実行ユーザーが読み書きできるかも確認してください。Windowsサービスの場合は、サービス設定で選ばれているJavaとログオンアカウントを確認します。
1-7. server.xmlなどの設定XMLを確認する
server.xml、context.xml、web.xmlを変更した直後に起動しなくなった場合は、XMLの閉じタグ、属性、ポート番号、参照先ファイルを直前の正常な状態と比較します。「必要なサーバーコンポーネントを開始できない」などのメッセージは結果であり、具体的な原因はその前後にあるLifecycleExceptionやSAXParseExceptionなどの例外に記録されます。
1-8. Eclipse上でTomcatが起動しない場合
EclipseのServersビューから起動できない場合は、Tomcat Runtimeに割り当てたJRE、HTTP・shutdownポートの競合、ワークスペース側のサーバー設定、Consoleビューの最初の例外を確認します。OS上で別のTomcatが同じポートを使用していないか、Eclipseが参照している設定と手動起動時のCATALINA_BASEが異なっていないかも切り分けます。
2. まとめ
Tomcatが起動しない場合は、コンソールまたはログに出た最初の例外を起点に、以下を順に確認してください。
- JAVA_HOME・JRE_HOMEとTomcatが利用するJava
- Tomcat系列が必要とするJavaのバージョン
- HTTPポートなどの競合
- catalina.out・logs・サービスログの最初の例外
- systemd・Windowsサービスの環境変数と実行権限
- server.xmlなど設定XMLの構文と参照先
- EclipseのRuntime JRE、ポート、ワークスペース側設定
それでもダメな場合は、そもそものTomcatの起動の仕組みについて、以下の記事に記載しているので参考にしてみてください。
設定を一度に変えず、ログに現れた原因を一つずつ解消して再起動すると、どの変更で復旧したかを追跡できます。