Debian 上 Tomcat 故障排查清单
一 快速定位与日志分析
sudo systemctl status tomcat9、ps aux | grep tomcat、ss -tulpen | grep ':8080'。tail -f catalina.out 实时跟踪;用 grep -i "error\|exception\|failed" catalina.out 快速筛选错误;必要时查看 localhost.二 常见故障与修复对照表
| 症状 | 快速检查 | 修复建议 |
|---|---|---|
| 端口被占用(默认 8080) | `ss -tulpen | grep ‘:8080’` |
| 启动失败、秒退 | systemctl status tomcat9、journalctl -xeu tomcat9、tail -n50 catalina.out |
依据日志报错逐项修复(见下一节) |
| 管理页面 403/401 | 查看 conf/tomcat-users.xml 角色与用户 | 添加用户并赋予 manager-gui/admin-gui 等角色 |
| 部署 WAR 后 404 | 检查 webapps 是否解压、应用 Context Path | 确认 WAR 已解压、访问路径与 appBase/Context 一致 |
| 控制台或请求乱码 | 查看 catalina.out 与页面输出 | 在 conf/logging.properties 设置 UTF-8;在 server.xml 的 Connector 增加 URIEncoding=“UTF-8” |
| 内存不足或频繁 Full GC | jstat -gcutil <pid> 1000 |
调整 JAVA_OPTS(如 -Xms512m -Xmx1024m),必要时分析堆转储 |
| 权限错误、日志写失败 | ls -ld logs/ work/ temp/ |
确保 tomcat:tomcat 拥有目录权限,日志目录可写 |
| 配置文件错误 | 校验 server.xml / web.xml | 修正标签闭合、路径、端口等语法与配置错误 |
| JDK 版本不匹配 | java -version、javac -version |
安装与 Tomcat 版本匹配的 JDK 并正确设置 JAVA_HOME |
| 自启动失败 | systemctl is-enabled tomcat9 |
启用服务:sudo systemctl enable --now tomcat9 |
三 配置文件与目录要点
四 高频报错速解
ss -tulpen | grep ':8080' 找到占用进程 PID,结束或改端口;编辑 conf/server.xml 的 -Xms1g -Xmx2g),必要时用 jmap -dump 导出堆转储分析。五 一键排查脚本与后续建议
#!/usr/bin/env bash
set -e
TOMCAT_USER=tomcat
TOMCAT_SERVICE=tomcat9
TOMCAT_HOME=/usr/share/tomcat9
CATALINA_OUT=/var/log/tomcat9/catalina.out
JAVA_HOME=/usr/lib/jvm/default-java
echo "=== 服务状态 ==="
systemctl status "$TOMCAT_SERVICE" || true
echo "=== 端口监听 ==="
ss -tulpen | grep -E ':(8080|8005|8009)'
echo "=== 进程与内存 ==="
pgrep -x java && jps -v || echo "No Java process found"
echo "=== 最近错误日志 ==="
[ -f "$CATALINA_OUT" ] && tail -n100 "$CATALINA_OUT" | grep -i -E 'error|exception|failed' || echo "No catalina.out"
echo "=== 权限检查 ==="
ls -ld /var/log/tomcat9 /var/lib/tomcat9/{work,temp} 2>/dev/null || true
echo "=== JDK 版本 ==="
"$JAVA_HOME/bin/java" -version 2>&1
echo "=== 建议后续 ==="
echo "1) 查看完整日志: less $CATALINA_OUT"
echo "2) 动态调优: 在 /etc/default/$TOMCAT_SERVICE 设置 JAVA_OPTS"
echo "3) 无法定位时: 增大日志级别 logging.properties 并重启"