Tomcat运行war包的问题分析与解决步骤

查Tomcat 进程

powershell 复制代码
ps -ef | grep tomcat

查看 Tomcat 启动日志(核心排查手段)

Tomcat 启动失败的原因会记录在日志中,优先查看以下日志文件:

powershell 复制代码
# 实时查看 catalina.out 日志(启动 Tomcat 后执行,观察是否有 admin 应用部署报错,最关键)
tail -100 /usr/local/tomcat/apache-tomcat-9.0.111/logs/catalina.out

# 查看localhost日志(记录应用初始化、访问异常)
tail -100 /usr/local/tomcat/apache-tomcat-9.0.111/logs/localhost.log

# 查看启动失败的详细日志
cat /usr/local/tomcat/apache-tomcat-9.0.111/logs/*.log | grep -i error

# 查看 admin 应用的访问日志(如果有访问记录,看响应状态码)
cat /usr/local/tomcat/apache-tomcat-9.0.111/logs/localhost_access_log.2024-xx-xx.txt | grep "/admin"

日志关键信息解读:

  • 若日志中无 Deploying web application directory [/usr/local/tomcat/.../admin-1.0]:Tomcat 未识别该应用(目录权限 / 结构问题);
  • 若有 ClassNotFoundException/NoClassDefFoundError:admin 应用缺少依赖包(WEB-INF/lib 目录不完整);
  • 若有 404 状态码:访问路径错误(如缺少默认首页);
  • 若有 500 状态码:admin 应用代码报错(如 web.xml 配置错误、启动类异常)。

排查常见启动失败原因

原因 1:目录权限问题(tomcat 用户无读写权限)

Tomcat 以 tomcat 用户启动,但相关目录可能归 root 所有,导致无法创建日志 / 临时文件:

powershell 复制代码
# 递归修改Tomcat目录所属用户和组为tomcat
chown -R tomcat:tomcat /usr/local/tomcat/apache-tomcat-9.0.111/

# 修改目录权限(确保可读写执行)
chmod -R 755 /usr/local/tomcat/apache-tomcat-9.0.111/

原因 2:端口被占用

Tomcat 默认占用 8080(HTTP)、8005(关闭端口)、8009(AJP),检查端口占用:

powershell 复制代码
# 检查8080端口
netstat -tlnp | grep 8080

# 检查8005端口
netstat -tlnp | grep 8005

# 若端口被占用,杀死占用进程(替换PID为实际进程号)
kill -9 PID
# 或修改Tomcat端口(编辑conf/server.xml)

原因 3:JDK 环境或权限问题

确认 tomcat 用户能访问 JDK 目录:

powershell 复制代码
# 切换到tomcat用户,检查JRE是否可用
sudo -u tomcat /usr/local/java/jdk1.8.0_201/jre/bin/java -version

# 若提示"Permission denied",修改JDK目录权限
chown -R root:root /usr/local/java/jdk1.8.0_201/
chmod -R 755 /usr/local/java/jdk1.8.0_201/

重新启动 Tomcat 并验证

powershell 复制代码
# 先停止可能残留的无效进程(若有)
sudo -u tomcat /usr/local/tomcat/apache-tomcat-9.0.111/bin/shutdown.sh

# 重新启动
sudo -u tomcat /usr/local/tomcat/apache-tomcat-9.0.111/bin/startup.sh

# 验证进程
ps -ef | grep tomcat
# 正常应看到类似如下进程:
# tomcat    198000      1  5 15:00 ?        00:00:02 /usr/local/java/jdk1.8.0_201/jre/bin/java ... org.apache.catalina.startup.Bootstrap start

# 验证端口监听
netstat -tlnp | grep 8080

总结

核心问题:Tomcat 启动脚本返回 "started" 不代表真启动成功,需以进程 / 端口 / 日志为准;

优先排查:日志文件(catalina.out)→ 目录权限 → 端口占用 → JDK 环境;

关键操作:给 tomcat 用户赋权、检查端口占用。

相关推荐
num_killer18 小时前
小白的Langchain学习
java·python·学习·langchain
期待のcode19 小时前
Java虚拟机的运行模式
java·开发语言·jvm
程序员老徐19 小时前
Tomcat源码分析三(Tomcat请求源码分析)
java·tomcat
a程序小傲19 小时前
京东Java面试被问:动态规划的状态压缩和优化技巧
java·开发语言·mysql·算法·adb·postgresql·深度优先
仙俊红19 小时前
spring的IoC(控制反转)面试题
java·后端·spring
阿湯哥19 小时前
AgentScope Java 集成 Spring AI Alibaba Workflow 完整指南
java·人工智能·spring
小楼v19 小时前
说说常见的限流算法及如何使用Redisson实现多机限流
java·后端·redisson·限流算法
与遨游于天地20 小时前
NIO的三个组件解决三个问题
java·后端·nio
czlczl2002092520 小时前
Guava Cache 原理与实战
java·后端·spring
yangminlei20 小时前
Spring 事务探秘:核心机制与应用场景解析
java·spring boot