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