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
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.
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
■INFORMATION
■PROFILE
■CONTACT