Shutdown Check

搜索文档

查找页面或章节

SC202:进行中的请求状态码错误

SC202(进行中的请求状态码错误)表示收到 SIGTERM 时正在处理的请求结束了,但状态码不是 workload.status。找出状态码被改变的原因。

SC202 表示一个进行中的请求完成了,但 HTTP 状态码与 workload.status 不一致。连接已经正常排空,问题要么是响应在关闭期间变了,要么是配置里期望的状态码本身就不对。

诊断码SC202 FAIL
阶段进行中请求的响应
CLI 退出码1
含义收到 SIGTERM 时正在运行的请求完成了,但 HTTP 状态码与 workload.status 不同。
输出信息
  • In-flight request returned HTTP <status>; expected <workload.status>
首先检查让已经在处理的请求正常完成;关闭期间只拒绝新的工作。

应该检查什么?

  • 不触发关闭,单独运行测试请求,记下它正常返回的状态码。
  • 确认 workload.status 与这个响应一致。
  • 检查关闭用的中间件是否对所有请求都返回 503。
  • 确保排空期间只拒绝新请求。
  • 使用 probe 启动确认时,检查工作开始后发生的错误。
shutdown-check.json
{
  "workload": {
    "path": "/slow",
    "status": 200,
    "started": { "type": "response-headers" }
  }
}

不要只是为了让测试通过就改期望的状态码。期望的状态码应该对应正常运行时成功请求返回的响应。

如何确认已修复?

分别在不关闭和关闭期间运行测试请求。只要请求是在 SIGTERM 之前开始的,两次响应都应该是同一个成功状态码。

新请求收到 503 可能是正确的;区别在于请求是什么时候进入应用的。如果不确定中间件的顺序,在请求开始时把排空状态打到日志里。