一、问题
Tomcat无法启动
二、排查方法
1、找到日志存放路径并查看日志
- 日志路径一般在Tomcat安装路径的/logs目录下
- 查看日志
- commons-daemon.2024-11-17.log 日志内容如下:
[2024-11-17 15:24:32] [info] [ 1556] Apache Commons Daemon procrun (1.3.3.0 64-bit) started.
[2024-11-17 15:24:32] [info] [ 1556] Running Service 'Tomcat10'...
[2024-11-17 15:24:32] [info] [ 7480] Starting service...
[2024-11-17 15:24:32] [error] [19736] FindClass org/apache/catalina/startup/Bootstrap failed
[2024-11-17 15:24:32] [error] [ 7480] Failed to start Java
[2024-11-17 15:24:32] [error] [ 7480] ServiceStart returned 4.
[2024-11-17 15:24:32] [info] [ 1556] Run service finished.
[2024-11-17 15:24:32] [info] [ 1556] Apache Commons Daemon procrun finished.
- 智能AI分析如下
- 查看另一个日志文件tomcat10-stderr.2024-11-17.log日志内容如下:
2024-11-17 15:24:32 Apache Commons Daemon procrun stderr initialized.
java.lang.UnsupportedClassVersionError: org/apache/catalina/startup/Bootstrap has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
- 智能AI分析如下
2、查看JDK版本
由以上分析可知,tomcat10.1安装目录下的 \bin\bootstrap.jar 文件是由Java 11打包而成,但是我启动tomcat的jdk版本为1.8,jdk版本过低导致的打不开tomcat
三、解决方法
注意:该解决方法适用于 开启 tomcat 的 jvm版本过低导致无法打开tomcat 的问题(也就是jdk版本过低),请学会分析日志找出问题原因,“对症下药”,因为导致tomcat打不开可能还会有其它原因,如端口占用。
替换jdk版本对应的jvm.dll文件,使其可以兼容由java 11打包的 bootstrap.jar,这里打算替换成jdk 17以上的版本对应的jvm.dll
bootstrap.jar文件路径在tomcat安装目录下的\bin\目录下
- 用everything搜索本机中已存在的jdk版本,若没有自行下载安装。搜索 \server\jvm.dll
从搜索的结果中可以找到一个jdk 17.0.5 的版本对应的jvm.dll(第一行那个,该版本jdk是eclipse自带的,使用这个文件即可)
- 复制路径
- 替换tomcat中的jvm.dll,点击应用即可
- 重新尝试启动
-
访问 localhost:8080,成功