You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat 8.5.31部署单个WAR包时卡住无日志输出求助

Tomcat 8.5部署WAR包启动卡住无日志输出的排查方案

这种情况我之前在项目迁移中碰到好多次了——从Tomcat 7升级到8.5后,大部分WAR包正常,但有一个卡在部署启动环节,连日志都没后续输出。别着急,咱们一步步排查:

1. 调大日志级别,抓取隐藏的细节

默认的Tomcat日志级别太粗,可能没记录到部署过程中的关键细节:

  • 打开Tomcat的conf/logging.properties,把org.apache.catalina.level改成FINE,对应的java.util.logging.ConsoleHandler.level也设为FINE,这样控制台会输出类加载、Servlet初始化等更细粒度的日志。
  • 别忘了检查应用自身的日志文件!很多应用会把日志输出到webapps/llas/WEB-INF/logs目录下,而非Catalina.out,说不定那里藏着启动失败的具体原因。

2. 导出线程栈,排查阻塞或死锁

这是最关键的一步,当应用卡住时,立刻执行以下命令导出JVM线程状态:

# 先找到Tomcat进程ID
ps aux | grep tomcat
# 导出线程栈到文件
jstack <你的Tomcat进程ID> > thread_dump.txt

打开thread_dump.txt,重点关注localhost-startStop-1线程(就是日志里负责部署WAR的线程):

  • 如果它处于BLOCKED状态,查看它在等待哪个锁,再定位持有该锁的线程,大概率是死锁或依赖资源未就绪(比如数据库连接池卡住等待数据库响应)。
  • 如果是WAITING状态,检查它在等待的条件,比如是否在等外部服务返回、异步任务完成等。

3. 排查Tomcat 8.5与应用的兼容性问题

Tomcat 8.5相对于7有不少升级,比如Servlet API到3.1、EL表达式行为变化、自带类库版本更新,很容易出现兼容性问题:

  • 检查应用WAR包内是否包含与Tomcat自带冲突的类库,比如javax.servlet-api.jar、jsp-api.jar,这些类库应由Tomcat提供,应用打包进去会导致类加载混乱,直接卡住。
  • 检查应用初始化代码,比如ServletContextListener或Spring启动监听器,有没有依赖Tomcat 7的内部API(比如org.apache.catalina下的某些类),这些在Tomcat 8中可能已被移除或修改。

4. 检查外部资源依赖

应用启动时通常会连接数据库、缓存或其他服务,如果这些服务未启动、网络不通,或连接超时设置过长,就会看起来像卡住:

  • 临时将外部依赖换成本地测试服务(比如用H2代替MySQL),或直接注释相关初始化代码,看应用能否正常启动,以此排除外部资源问题。

5. 手动解压WAR包尝试部署

有时候WAR包压缩格式有问题,或Tomcat解压时遇到权限问题,也会导致卡住:

  • 手动将llas.war解压到webapps/llas目录下,重启Tomcat,说不定会输出更明确的错误信息。

以下是你提供的Catalina.out最后部分的日志:

23-May-2018 04:14:55.314 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.5.31 
23-May-2018 04:14:55.328 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Apr 27 2018 20:24:25 UTC 
23-May-2018 04:14:55.328 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.5.31.0 
23-May-2018 04:14:55.328 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux 
23-May-2018 04:14:55.328 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 3.10.0-693.21.1.el7.x86_64 
23-May-2018 04:14:55.328 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64 
23-May-2018 04:14:55.328 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/java/jdk1.8.0_60/jre 
23-May-2018 04:14:55.328 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_60-b27 
23-May-2018 04:14:55.328 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation 
23-May-2018 04:14:55.329 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /opt/apache-tomcat-8.5.31 
23-May-2018 04:14:55.329 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /opt/apache-tomcat-8.5.31 
23-May-2018 04:14:55.329 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties 
23-May-2018 04:14:55.329 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 
23-May-2018 04:14:55.329 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048 
23-May-2018 04:14:55.329 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources 
23-May-2018 04:14:55.329 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 
23-May-2018 04:14:55.330 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs= 
23-May-2018 04:14:55.330 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/opt/tomcat 
23-May-2018 04:14:55.330 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/opt/tomcat 
23-May-2018 04:14:55.330 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/opt/tomcat/temp 
23-May-2018 04:14:55.330 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent 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-May-2018 04:14:55.644 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"] 
23-May-2018 04:14:55.675 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read 
23-May-2018 04:14:55.706 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"] 
23-May-2018 04:14:55.708 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read 
23-May-2018 04:14:55.720 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 1282 ms 
23-May-2018 04:14:55.755 WARNING [main] org.apache.tomcat.jdbc.pool.ConnectionPool.checkPoolConfiguration maxIdle is smaller than minIdle, setting maxIdle to: 5 
23-May-2018 04:14:57.653 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina] 
23-May-2018 04:14:57.654 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.31 
23-May-2018 04:14:57.711 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/opt/apache-tomcat-8.5.31/webapps/llas.war]

内容的提问来源于stack exchange,提问作者sachin thakur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:45:34