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

相关推荐
独隅19 分钟前
IntelliJ IDEA 接入多种AI大模型插件终极指南(2026.1 企业合规版)
java·人工智能·intellij-idea
还是奇怪1 小时前
Simon Willison 用 DSPy 优化 Datasette Agent 提示词:提示工程正在变成可测试的软件工程
java·开发语言·软件工程
zfoo-framework1 小时前
1.ansible安装 2.虚拟机克隆
java
码上解惑1 小时前
从 Dify 工作流说起:常用节点怎么选、怎样组合?
java·人工智能·ai·agent·dify·智能体·spring ai
青山木2 小时前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先
程序员-珍2 小时前
报错下载android sdk失败
android·java
糖果店的幽灵3 小时前
langgraph分支之 - 动态分支(Dynamic Branch)
java·前端·javascript·人工智能·langgraph
吃饱了得干活3 小时前
亿级订单表分库分表设计,从0到1全流程
java·数据库·面试
唐青枫3 小时前
Java Spring Security 实战详解:从登录认证到 JWT 权限控制
java
曹牧3 小时前
文档格式:OFD
java