Shutdown Check

搜索文档

查找页面或章节

SC201:进行中的请求被中断

SC201(进行中的请求被中断)表示收到 SIGTERM 时正在处理的请求,在响应结束前被切断了。不要过早退出进程或关闭 socket。

SC201 表示一个进行中的请求在 SIGTERM 之后断开了连接。部署期间,同样的故障在用户那边常表现为连接被重置或 502。

诊断码SC201 FAIL
阶段进行中请求的响应
CLI 退出码1
含义收到 SIGTERM 时正在运行的请求被切断:响应结束前,连接被重置或关闭。
输出信息
  • In-flight request was interrupted: <error>
首先检查还有请求没有响应完时,不要调用 process.exit() 或 closeAllConnections(),也不要销毁 socket。

通常是什么切断了请求?

  • 没有 SIGTERM 处理函数,Node.js 立即退出。
  • 处理函数在请求完成前调用了 process.exit()。
  • 代码销毁了所有 socket,包括正在使用的。
  • 包装进程终止,服务器也随之退出。
  • 第二次信号强制进程提前退出。

如何修复?

用 server.close() 停止接受新连接,等它的回调执行后再完成清理。不要销毁正在使用的 socket。

process.on("SIGTERM", () => {
  server.close((error) => {
    if (error) process.exitCode = 1;
  });
});

如果你在跟踪空闲的 keep-alive 连接,只关闭空闲的那些。进行中的响应必须能正常结束。

如何确认已修复?

请求现在应该以 HTTP <status> 结束,而不是 aborted、ECONNRESET 或其他 socket 错误。进程必须在请求结束事件之后才退出。

如果运维人员或进程管理器可能发送第二次信号,就加上 repeatSignalAfterMs 运行测试。这样能发现单次信号触发不到的提前退出分支。