Debian 上 Tomcat 日志中的异常代码含义与处理
一、日志结构与异常代码类型
二、HTTP 状态码含义与排查要点
| 状态码 | 含义 | 常见触发与排查要点 |
|---|---|---|
| 400 Bad Request | 请求无效或语法错误 | 请求体/头格式错误、JSON 不合法等;检查客户端请求与 Content-Type/长度 |
| 401 Unauthorized | 未认证或认证失败 | 缺少或错误的凭据;核对认证方式、Token/证书 |
| 403 Forbidden | 已认证但无权限 | 访问控制策略/角色权限不足;检查应用/容器的安全约束 |
| 404 Not Found | 资源不存在 | 路径拼写、大小写、部署是否成功;核对 webapps 与映射 |
| 405 Method Not Allowed | 方法不被允许 | 对资源使用了不支持的 GET/POST/PUT 等;检查 Servlet 映射与前端方法 |
| 409 Conflict | 请求与当前资源状态冲突 | 如并发修改导致版本冲突;检查业务逻辑与幂等性 |
| 429 Too Many Requests | 请求过于频繁 | 触发限流策略;检查客户端重试与限流配置 |
| 500 Internal Server Error | 服务器内部错误 | 应用代码异常/配置错误;查看堆栈定位根因 |
| 501 Not Implemented | 不支持请求功能 | 服务器未实现所需功能;检查协议/方法支持 |
| 502 Bad Gateway | 网关/代理收到无效响应 | 反向代理/上游异常;检查上游健康与网络 |
| 503 Service Unavailable | 服务暂时不可用 | 过载/维护/进程未就绪;检查进程与资源 |
| 504 Gateway Timeout | 网关/代理等待上游超时 | 上游处理慢或挂起;检查后端性能与超时设置 |
| 以上状态码在 Tomcat 访问日志与日志条目中均可见,通常伴随请求行与 UA 等上下文信息。 |
三、Java 异常类名含义与排查要点
| 异常类名 | 含义 | 常见触发与排查要点 |
|---|---|---|
| java.lang.NullPointerException | 空指针解引用 | 对象未初始化/返回 null;用堆栈定位到具体行并加空值保护 |
| java.lang.IllegalArgumentException | 非法参数 | 参数不合法/越界;核对接口契约与入参校验 |
| java.io.IOException / Stream closed | I/O 异常或流已关闭 | 网络不稳、客户端提前断开、流复用错误;检查网络与流生命周期 |
| java.lang.OutOfMemoryError: Java heap space | 堆内存不足 | 对象激增/内存泄漏;结合 jmap/jinfo 分析堆,适当增加 -Xms/-Xmx |
| java.lang.OutOfMemoryError: PermGen space(JDK 7 及更早) | 永久代内存不足 | 类/元数据过多;增加 -XX:PermSize/-XX:MaxPermSize 或升级到 JDK 8+ 使用 Metaspace |
| NoClassDefFoundError | 类定义未找到 | 依赖缺失/打包遗漏;核对 WEB-INF/lib 与依赖范围 |
| Address already in use | 端口被占用 | 另一进程占用 8080 等;用 netstat/ss 查占用并释放或改端口 |
| JAVA_HOME 未定义 / Could not reserve enough space for object heap | 环境或内存初始化失败 | 设置 JAVA_HOME,调整 -Xms/-Xmx 匹配可用内存 |
| SSL 握手失败 | TLS/证书配置问题 | 证书路径/密码错误、协议/算法不匹配;核对 server.xml Connector 配置 |
| 以上异常在 catalina.out 与 localhost.*.log 中常见,堆栈顶部通常指向问题发生点。 |
四、Debian 下的快速定位与修复步骤