Tomcat Won’t Start? A Practical Troubleshooting Checklist


Publication Date:

Updated:


INFORMATION > Tomcat Won’t Start? A Practical Troubleshooting Checklist

Bottom line: Read the first root-cause exception in Tomcat and service-manager logs before changing configuration. Then verify Java compatibility, port ownership, file permissions, XML syntax, disk space, and the effective CATALINA_BASE.

What you'll learn

  • A repeatable order for checking service status, logs, environment, and connectors.
  • How to distinguish a JVM launch failure from a Tomcat configuration or deployed-application failure.
  • Why deleting work directories or increasing memory without evidence can hide the real problem.

Who this is for: Developers and administrators responding to a Tomcat process that exits or never opens its connector.

2026 context: The original cases remain useful diagnostic patterns, but file locations and supported Java versions depend on the installed Tomcat family and packaging. Do not reuse legacy JVM options without checking current Java documentation.

Overview

This guide covers common reasons Tomcat 9.0.27 fails after startup.bat or startup.sh is run and shows how to diagnose each case.

Table of Contents

  1. Common Tomcat startup failures
  2. Conclusion

1. Common Tomcat startup failures

Start with the first error in the Tomcat console or log. The following four cases cover common failures in the historical Windows example.

1-1. JAVA_HOME or JRE_HOME is missing

Cause

If neither JAVA_HOME nor JRE_HOME is set, the following error will be output.

startup.bat


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

Resolution

Set a compatible JDK path through System Properties → Advanced → Environment Variables. A new Command Prompt is required after changing environment variables because an existing process retains its old environment. Verify the effective value with echo %JAVA_HOME% or echo %JRE_HOME%.

C:\Users\user>echo %JAVA_HOME%
C:\Program Files (x86)\Java\jdk-11

1-2. Java and Tomcat versions are incompatible

Cause

Each Tomcat family supports a defined range of Java versions. The official Tomcat version matrix lists the minimum Java requirement and the implemented Jakarta or Java EE specifications.

The original Tomcat 9.0.27 example could run on Java 8 or later releases supported by that Tomcat build. This does not mean that every future Java release is compatible with an old Tomcat patch version.

Resolution

Select a supported Tomcat patch release and JDK combination from the current matrix, then point the effective environment variable at that JDK.

1-3. JRE_HOME overrides JAVA_HOME

Cause

In the historical scripts, a defined JRE_HOME can take precedence over JAVA_HOME. Checking only JAVA_HOME can therefore hide the runtime Tomcat actually selects.

Resolution

Inspect both variables in the same process that launches Tomcat. Remove the obsolete override or point it to a runtime supported by the installed Tomcat release.

1-4. The connector port is already in use

Cause

Tomcat starts on port 8080 by default. If there are other applications running on port 8080, the following error will be output.

Critical [main] org.apache.catalina.util.LifecycleBase.handleSubClassException Failed to initialize component [Connector[HTTP/1.1-8080]]

Resolution

Identify the owning process and determine whether it should be stopped or whether the Tomcat connector should use a different port.

The following Windows command lists connections and listeners containing 8080. Adjust the port for the installed configuration. A listener line includes a process ID that can be resolved with Task Manager or tasklist.

Note: The following commands are for 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

2. Conclusion

If Tomcat does not start, check the following four points.

  • the effective JAVA_HOME or JRE_HOME value;
  • the supported Java and Tomcat version combination;
  • whether JRE_HOME overrides the intended JDK;
  • whether another process owns the connector port.

If those checks do not explain the failure, trace the wrapper scripts as described in How Tomcat starts and inspect the first exception in the logs.

Official references