Ubuntu Tomcat 日志警告处理流程
一、快速定位与通用排查
二、常见警告与对应处理
| 警告现象 | 典型日志关键词 | 可能原因 | 处理要点 |
|---|---|---|---|
| 端口被占用 | java.net.BindException: Address already in use | 其他进程占用 8080/8009 等 | 用 lsof/netstat/ss 查占用进程并停止,或修改 server.xml 的端口 |
| 内存不足 | Java HotSpot VM warning: os::commit_memory … failed; errno=12 或 OutOfMemoryError | 物理内存/交换空间不足、堆设置过小、线程/缓存过多 | 增加内存或交换分区;优化 -Xms/-Xmx/-Xss;减少线程数;必要时增大 -XX:ReservedCodeCacheSize |
| 目录不存在或不可读 | WARNING: Problem with directory […] exists: [false], isDirectory: [false], canRead: [false] | 使用包管理安装(如 tomcat7)时目录散落、链接缺失 | 为缺失目录建立符号链接(如 common/server/shared → /var/lib/tomcat7/…),或改用官方压缩包集中安装 |
| 类加载或 JDBC 驱动缺失 | ClassNotFoundException / cannot load JDBC driver class | 驱动 JAR 未放入 $CATALINA_HOME/lib | 将对应数据库驱动(如 MySQL/DB2/Oracle)JAR 放入 lib 目录并重启 |
| 日志写入失败 | java.io.FileNotFoundException: …/catalina.out 或 Permission denied | 权限不足、日志文件被占用/锁定 | 确认运行用户对 logs/ 具备写权限;避免外部进程占用日志文件 |
| 停止时线程未关闭 | The web application […] appears to have started a thread […] but has failed to stop it | 应用创建了未守护/未关闭的线程(如异步任务、ZK 客户端、Mongo 清理) | 在应用内注册关闭钩子、优雅关闭线程池/连接;必要时在 Context 配置 reloadable=“false” 并重启 |
| 多次认证失败被锁定 | LockOutRealm: An attempt was made to authenticate the locked user “tomcat” | 错误密码多次尝试触发锁定策略 | 检查 tomcat-users.xml 用户与角色配置,解锁或重置密码,避免暴力尝试 |
三、日志与配置的优化建议
四、最小可行修复示例
五、何时需要进一步深入