Tomcat 无法启动:实用排查指南
出版日期:
更新:
技术文章 > Tomcat 无法启动:实用排查指南
2026 状态和安全使用
结论:在更改配置之前,请阅读 Tomcat 和服务管理器日志中的第一个根本原因异常。然后验证 Java 兼容性、端口所有权、文件权限、XML 语法、磁盘空间和有效的 CATALINA_BASE。
你将学到什么
- 用于检查服务状态、日志、环境和连接器的可重复命令。
- 如何区分 JVM 启动失败与 Tomcat 配置或部署的应用程序失败。
- 为什么在没有证据的情况下删除工作目录或增加内存可以隐藏真正的问题。
这适用于谁:对退出或从不打开其连接器的 Tomcat 进程做出响应的开发人员和管理员。
截至 2026 年的适用情况: 原始案例仍然有用的诊断模式,但文件位置和支持的 Java 版本取决于安装的 Tomcat 系列和打包。在未检查当前 Java 文档的情况下,请勿重复使用旧版 JVM 选项。
安全注意事项:原始文章中的命令和配置示例尚未在当前生产环境中重新运行。应用之前,请在单独的测试环境中验证支持的版本、备份、访问控制和回滚步骤。
官方主要来源
概述。
本指南说明 Tomcat 9.0.27 在运行 startup.bat 或 startup.sh 后仍无法启动的常见原因及诊断方法。
目录
- Tomcat 无法启动:实用排查指南
- 1-1. 没有设置 JAVA_HOME。
- 1-2. JAVA版本与Tomcat不兼容。
- 1-3. JRE_HOME被启用。
- 1-4. 冲突的端口号。
- 摘要
1. Tomcat 无法启动:实用排查指南
导致Tomcat不启动的原因有很多,但本节介绍了可能导致Tomcat不启动的主要事件。
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版本 "的 "9.0.x",即 "8及以后"。
这意味着设置Java 8或更高的版本可以工作。
【如何处理】
根据以下Tomcat网站,将环境变量重写为相应的Java。
https://tomcat.apache.org/whichversion.html
1-3. JRE_HOME被启用。
【原因】
如果 "JRE_HOME "和 "JAVA_HOME "被设置,Tomcat对 "JRE_HOME "有效。 即使你看了 "JAVA_HOME",发现Java与Tomcat兼容,"JRE_HOME "也能工作,所以 "JRE_HOME "必须是与Tomcat兼容的Java。
【如何处理】
从 "系统属性,高级设置,环境变量 "中,将JRE_HOME中的Java改写为Tomcat对应的Java。
1-4. 冲突的端口号。
【原因】
Tomcat默认在8080端口启动。 如果有其他应用程序在8080端口运行,则会输出以下错误。
Critical [main] org.apache.catalina.util.LifecycleBase.handleSubClassException Failed to initialize component [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
2. 摘要
如果Tomcat没有启动,请检查以下四点。
- 没有设置 JAVA_HOME。
- JAVA版本与Tomcat不兼容。
- JRE_HOME被启用。
- 冲突的端口号。
如果这不起作用,请参考下面关于Tomcat如何首先启动的文章。