tomcat启动卡在Initializing Spring root WebApplicationContext
1、tomcat启动后有进程,但是端口没有起来,也没有日志。
进入到tomcat安装目录下的bin执行./catalina.sh run
这个命令会把启动信息打印在控制台
[root@ip-172-31-38-1 bin]# ./catalina.sh run
Using CATALINA_BASE: /usr/local/tomcat_classroom
Using CATALINA_HOME: /usr/local/tomcat_classroom
Using CATALINA_TMPDIR: /usr/local/tomcat_classroom/temp
Using JRE_HOME: /usr/java/default
Using CLASSPATH: /usr/local/tomcat_classroom/bin/bootstrap.jar
九月 23, 2025 1:37:48 下午 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
九月 23, 2025 1:37:48 下午 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8880
九月 23, 2025 1:37:48 下午 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8843
九月 23, 2025 1:37:48 下午 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 794 ms
九月 23, 2025 1:37:48 下午 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
九月 23, 2025 1:37:48 下午 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/6.0.39
九月 23, 2025 1:37:49 下午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring root WebApplicationContext
2、日志打印出来后,发现tomcat启动卡在Initializing Spring root WebApplicationContext
使用jstack获取线程堆栈,检查Spring初始化是否卡在某个Bean或线程:
jstack <Tomcat进程ID> > /tmp/thread-dump.log
[root@ip-172-31-38-1 WEB-INF]# jstack 26430 > /tmp/thread-dump.log
[root@ip-172-31-38-1 WEB-INF]# cat /tmp/thread-dump.log
2025-09-23 14:31:53
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.151-b12 mixed mode):"Attach Listener" #93 daemon prio=9 os_prio=0 tid=0x00007ff0fc001800 nid=0x67ef waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"TP-Monitor" #91 daemon prio=5 os_prio=0 tid=0x00007ff144d05000 nid=0x67ce in Object.wait() [0x00007ff0a9d2c000]java.lang.Thread.State: TIMED_WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x000000070a84aff8> (a org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable)at org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable.run(ThreadPool.java:565)- locked <0x000000070a84aff8> (a org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable)at java.lang.Thread.run(Thread.java:748)"TP-Processor4" #90 daemon prio=5 os_prio=0 tid=0x00007ff144b28800 nid=0x67cd runnable [0x00007ff0a9e2d000]java.lang.Thread.State: RUNNABLEat java.net.PlainSocketImpl.socketAccept(Native Method)at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409)at java.net.ServerSocket.implAccept(ServerSocket.java:545)at java.net.ServerSocket.accept(ServerSocket.java:513)at org.apache.jk.common.ChannelSocket.accept(ChannelSocket.java:311)at org.apache.jk.common.ChannelSocket.acceptConnections(ChannelSocket.java:668)at org.apache.jk.common.ChannelSocket$SocketAcceptor.runIt(ChannelSocket.java:879)at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)at java.lang.Thread.run(Thread.java:748)"TP-Processor3" #89 daemon prio=5 os_prio=0 tid=0x00007ff1450c0000 nid=0x67cc in Object.wait() [0x00007ff124678000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x000000070a84a6e8> (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)at java.lang.Object.wait(Object.java:502)at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662)- locked <0x000000070a84a6e8> (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)at java.lang.Thread.run(Thread.java:748)"TP-Processor2" #88 daemon prio=5 os_prio=0 tid=0x00007ff1450bf000 nid=0x67cb in Object.wait() [0x00007ff124779000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x000000070a84a260> (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)at java.lang.Object.wait(Object.java:502)at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662)- locked <0x000000070a84a260> (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)at java.lang.Thread.run(Thread.java:748)"TP-Processor1" #87 daemon prio=5 os_prio=0 tid=0x00007ff14468e000 nid=0x67ca in Object.wait() [0x00007ff12487a000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x000000070a849d98> (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)at java.lang.Object.wait(Object.java:502)at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662)- locked <0x000000070a849d98> (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)at java.lang.Thread.run(Thread.java:748)"http-8843-Acceptor-0" #86 daemon prio=5 os_prio=0 tid=0x00007ff144c5e800 nid=0x67c9 runnable [0x00007ff12497b000]java.lang.Thread.State: RUNNABLEat java.net.PlainSocketImpl.socketAccept(Native Method)at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409)at java.net.ServerSocket.implAccept(ServerSocket.java:545)at sun.security.ssl.SSLServerSocketImpl.accept(SSLServerSocketImpl.java:348)at org.apache.tomcat.util.net.jsse.JSSESocketFactory.acceptSocket(JSSESocketFactory.java:178)at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:352)at java.lang.Thread.run(Thread.java:748)"http-8880-Acceptor-0" #85 daemon prio=5 os_prio=0 tid=0x00007ff144c5d800 nid=0x67c8 runnable [0x00007ff124a7c000]java.lang.Thread.State: RUNNABLEat java.net.PlainSocketImpl.socketAccept(Native Method)at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409)at java.net.ServerSocket.implAccept(ServerSocket.java:545)at java.net.ServerSocket.accept(ServerSocket.java:513)at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61)at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:352)at java.lang.Thread.run(Thread.java:748)"ContainerBackgroundProcessor[StandardEngine[Ca
通过此步骤我查到了原因