Linux系统Tomcat启动失败怎么办
导读:Linux 下 Tomcat 启动失败的快速排查与修复 一、先确认是否真的在运行 查看进程:ps -aux | grep tomcat;若使用 systemd 管理,执行:systemctl status tomcat。正常应看到包含 o...
Linux 下 Tomcat 启动失败的快速排查与修复
一、先确认是否真的在运行
- 查看进程:ps -aux | grep tomcat;若使用 systemd 管理,执行:systemctl status tomcat。正常应看到包含 org.apache.catalina.startup.Bootstrap 的 Java 进程。
- 查看监听端口:ss -tunlp | grep java 或 netstat -tunlp | grep java;默认 HTTP 端口为 8080。
- 本地连通性测试:curl -I http://localhost:8080,预期返回 HTTP/1.1 200 或 302。
- 若进程不存在或无监听,基本可判定启动失败,进入日志定位。
二、查看日志定位根因
- 进入日志目录:cd $CATALINA_HOME/logs(若未设置 CATALINA_HOME,通常在 Tomcat 安装目录的 logs 下)。
- 关键日志与用途:
- catalina.out:主日志,绝大多数启动错误都会在这里打印。
- catalina.log:启动过程与组件初始化日志。
- localhost.log:应用部署与上下文初始化日志。
- localhost_access_log.*.txt:访问日志(用于排查访问层面问题)。
- 典型错误关键词:
- Address already in use(端口被占用)
- ClassNotFound/NoClassDefFoundError(依赖或 JDK 问题)
- SEVERE [main] org.apache.catalina.startup.HostConfig.deployDirectory(应用部署失败)
- OutOfMemoryError(内存不足)
三、常见原因与对应修复
- 端口被占用(如 8080/8005)
- 查找占用:lsof -i:8080 或 ss -tunlp | grep 8080;必要时 kill -9 释放端口。
- 或修改 $CATALINA_HOME/conf/server.xml 中的 为未占用端口。
- Java 环境或版本不匹配
- 验证:java -version、javac -version;确保 JAVA_HOME 指向 JDK(而非仅 JRE),且版本与 Tomcat 兼容。
- 服务以 no_login 方式启动时,需在用户环境文件显式导出变量(Ubuntu:~/.bashrc、~/.profile;CentOS:~/.bashrc、~/.bash_profile):
- export JAVA_HOME=/usr/local/jdk/jdk1.8.0_151
- export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
- export PATH=$JAVA_HOME/bin:$PATH
- 配置文件错误
- 重点检查 $CATALINA_HOME/conf/server.xml 的 配置、目录权限与应用的 docBase 是否存在且可读。
- 内存不足
- 在 bin/catalina.sh 中设置:export JAVA_OPTS=“-Xms512m -Xmx1024m -XX:MaxMetaspaceSize=256m”(按机器资源调整)。
- 应用部署失败
- 查看 localhost.log 与应用日志;校验 WAR 包完整性与依赖,必要时清理 webapps 后重部署。
- 磁盘空间不足
- 执行 df -h 检查;若日志目录过大,可清理旧日志后再启动。
- 权限问题
- 确保运行用户对 $CATALINA_HOME(含子目录与 logs)具备读写执行权限。
四、网络与防火墙检查
- 确认监听端口已绑定到 0.0.0.0(而非仅 127.0.0.1):ss -tunlp | grep java。
- 防火墙放行(firewalld 示例):
- firewall-cmd --permanent --add-port=8080/tcp
- firewall-cmd --reload
- SELinux(RHEL/CentOS):
- 临时测试:setenforce 0
- 永久调整(谨慎):sed -i ‘s/SELINUX=enforcing/SELINUX=permissive/g’ /etc/selinux/config
- 外部连通性:从外部机器执行 curl -I http://< 服务器IP> :8080 验证。
五、服务管理与一键自检脚本
- 常用服务管理:
- 启动/停止/重启:systemctl start|stop|restart tomcat
- 查看状态:systemctl status tomcat
- 一键自检脚本(示例,保存为 check_tomcat.sh,chmod +x 后执行):
- 作用:快速检查进程、端口、日志错误、JDK、磁盘。
- 用法:./check_tomcat.sh [/opt/tomcat](参数为 CATALINA_HOME,默认当前目录)
#!/usr/bin/env bash
CATALINA_HOME="${
1:-.}
"
LOGS="$CATALINA_HOME/logs"
PORT=8080
echo "=== Tomcat 快速自检 ==="
echo "[1/6] Java 版本与 JAVA_HOME"
java -version 2>
&
1 || {
echo "未找到 java,请安装 JDK 并配置 JAVA_HOME";
exit 1;
}
echo "JAVA_HOME=$JAVA_HOME"
echo "[2/6] 进程与端口"
ps -ef | grep -i tomcat | grep -v grep || echo "未检测到 Tomcat 进程"
ss -tunlp | grep ":$PORT" || echo "端口 $PORT 未被监听"
echo "[3/6] 最近启动日志错误(catalina.out)"
[ -f "$LOGS/catalina.out" ] &
&
tail -n 50 "$LOGS/catalina.out" | grep -i -E "error|exception|fail|SEVERE" || echo "未找到 $LOGS/catalina.out"
echo "[4/6] 应用部署日志(localhost.log)"
[ -f "$LOGS/localhost.log" ] &
&
tail -n 30 "$LOGS/localhost.log" || echo "未找到 $LOGS/localhost.log"
echo "[5/6] 磁盘空间"
df -h | grep -E 'Filesystem|/$'
echo "[6/6] 监听地址"
ss -tunlp | grep java
echo "自检完成,请结合上述输出定位问题。"
以上步骤覆盖了 90%+ 的启动失败场景:先看日志找关键词,再按“端口 → Java → 配置 → 应用 → 资源/权限 → 网络”的顺序逐项排除,通常可以快速恢复。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux系统Tomcat启动失败怎么办
本文地址: https://pptw.com/jishu/753055.html
