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 小时前
java map判断是否有key,get(key)+x,否则put(key,x)的新写法
java·开发语言
webbodys7 小时前
Python文件操作与异常处理:构建健壮的应用程序
java·服务器·python
石工记8 小时前
对称加密 vs 非对称加密图解详解
java·网络安全
不急不躁1238 小时前
Android16 给应用默认获取权限
android·java
C雨后彩虹8 小时前
5G网络建设
java·数据结构·算法·华为·面试
码界奇点8 小时前
基于Spring Boot的后台管理系统设计与实现
java·spring boot·后端·车载系统·毕业设计·源代码管理
爱敲点代码的小哥8 小时前
json序列化和反序列化 和 数组转成json格式
java·前端·json
零度念者8 小时前
Java IO/NIO 深度解析:从底层原理到高性能图片网关实战
java·nio
这是程序猿8 小时前
基于java的ssm框架经典电影推荐网站
java·开发语言·spring boot·spring·经典电影推荐网站