ENGINEERING PLAYBOOK
HTTP 500 内部错误排查
500 表示服务器在处理请求时没有给出更具体的成功响应,但错误可能发生在代理、应用、模板、数据库或外部依赖。排查应冻结一个失败请求,以同一时区和请求标识串联全部证据。
适用人群:需要用请求标识串联代理、应用和下游证据的服务维护人员
排查路径
- 确认 500 由哪一层生成,避免只看浏览器错误页。
- 锁定一个失败样本并保存完整请求条件。
- 按最近变更、异常栈、下游状态与资源告警排序假设。
- 在可控环境复现并验证最小修复。
执行步骤
- 记录失败请求的时间、路径、方法与 request id。
- 检查 Nginx error log 和应用异常栈是否对应。
- 核对数据库、缓存和外部 API 的状态与超时。
- 检查磁盘、内存、文件句柄和连接池上限。
- 回滚最近变更后比较相同请求的结果。
可复制命令与示例
检查响应与请求标识
curl -sS -D - -o /tmp/body https://example.test/api | sed -n '1,30p'按时间查看服务日志
journalctl -u app.service --since "10 minutes ago" --no-pager可复现任务记录
具体错误或任务
单个 API 请求返回 500,需要确认错误由 Nginx、应用、数据库还是外部依赖生成。
失败信号:状态行为 500,响应含 request id;同一时间窗的应用日志存在异常或上游超时。
最小输入
固定方法、路径、脱敏请求体、失败时间、request id 和最近变更摘要。
验证命令或步骤
curl -sS -D /tmp/headers -o /tmp/body 'https://example.test/api'; sed -n '1,20p' /tmp/headers预期输出
修复后同一输入返回预期 2xx/4xx,并可用 request id 在日志中定位完整处理链。
失败输出
仍返回 500,或重启后暂时成功但没有对应异常、根因和回归证据。
成功判据
最小修复解释原异常,同输入回归通过,反向错误样本仍按预期失败,5xx 比例不反弹。
本任务常见错误
- 只靠重启清除现象
- 时间窗与日志时区不一致
- 把所有 500 归因于应用代码
资料与适用边界
状态码语义依据 RFC 9110;具体异常必须由目标服务日志、依赖状态和同一请求标识共同证明。
证据块复核日期:2026-09-04
相关站内页面
资料依据与复核边界
资料复核日期:2026-08-29