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

相关推荐
寻星探路1 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
曹牧3 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
爬山算法4 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty7254 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎5 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄5 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
忆~遂愿5 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
小韩学长yyds5 小时前
Java序列化避坑指南:明确这4种场景,再也不盲目实现Serializable
java·序列化
仟濹5 小时前
【Java基础】多态 | 打卡day2
java·开发语言
Re.不晚5 小时前
JAVA进阶之路——无奖问答挑战2
java·开发语言