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 用户赋权、检查端口占用。

相关推荐
毕设源码-朱学姐7 小时前
【开题答辩全过程】以 基于JavaWeb的网上家具商城设计与实现为例,包含答辩的问题和答案
java
C雨后彩虹9 小时前
CAS与其他并发方案的对比及面试常见问题
java·面试·cas·同步·异步·
java1234_小锋10 小时前
Java高频面试题:SpringBoot为什么要禁止循环依赖?
java·开发语言·面试
2501_9445255410 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 账户详情页面
android·java·开发语言·前端·javascript·flutter
计算机学姐10 小时前
基于SpringBoot的电影点评交流平台【协同过滤推荐算法+数据可视化统计】
java·vue.js·spring boot·spring·信息可视化·echarts·推荐算法
Filotimo_10 小时前
Tomcat的概念
java·tomcat
lang2015092810 小时前
Tomcat8RunnerCli:可执行WAR的命令行门面
tomcat
索荣荣11 小时前
Java Session 全面指南:原理、应用与实践(含 Spring Boot 实战)
java·spring boot·后端
Amumu1213811 小时前
Vue Router(二)
java·前端