Ubuntu Tomcat日志异常的标准处理流程
一 定位与查看日志
tail -f /path/to/tomcat/logs/catalina.outgrep -i 'ERROR\|SEVERE\|Exception' /path/to/tomcat/logs/catalina.outsed -n '/2025-12-15 10:00:00/,/2025-12-15 10:10:00/p' /path/to/tomcat/logs/catalina.outless /path/to/tomcat/logs/catalina.outgrep -c 'ERROR' /path/to/tomcat/logs/catalina.out二 快速排查步骤
ps aux | grep tomcat);检查端口占用(如 8080):netstat -tulpen | grep 8080 或 lsof -i :8080,若冲突,结束占用进程或调整 server.xml 的端口。free -h、df -h),防止因资源不足导致异常。sudo systemctl restart tomcat 或通过脚本重启)。三 常见异常与处理对照表
| 异常现象或关键词 | 可能原因 | 处理要点 |
|---|---|---|
| Address already in use(端口被占用) | 其他进程占用 8080 等端口 | lsof -i :8080 查 PID,kill -9 PID 或调整 server.xml 端口 |
| ClassNotFoundException / NoClassDefFoundError | 依赖 JAR 缺失或版本冲突 | 将依赖放入 WEB-INF/lib,或修正版本;必要时清理工作目录后重部署 |
| OutOfMemoryError | 堆内存不足 | 调整 JAVA_OPTS(如 -Xms512m -Xmx1024m),优化应用内存使用 |
| SQLException / Connection refused | 数据库 URL、账号密码错误或数据库不可达 | 校验连接串、网络、账号权限;必要时调整连接池配置 |
| FileNotFoundException | 配置或文件路径错误 | 确认路径存在且 Tomcat 有访问权限 |
| 日志乱码 | 编码不一致 | 在 logging.properties 设置 java.util.logging.ConsoleHandler.encoding=UTF-8,并确保环境使用 UTF-8 |
| INVALID BYTE TAG IN CONSTANT POOL | 编译后的 class 文件冲突或损坏 | 清理应用目录的 classes 与冲突包,使用一致版本的编译产物重部署 |
四 提升日志可观测性与维护
org.apache.catalina.core.*=FINE 或 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level=FINE;修改后需重启使其生效。/usr/local/tomcat/logs/catalina.out { daily rotate 7 compress missingok notifempty copytruncate }logrotate -f /etc/logrotate.conf 测试轮转。