SC201 表示一个进行中的请求在 SIGTERM 之后断开了连接。部署期间,同样的故障在用户那边常表现为连接被重置或 502。
| 诊断码 | SC201 FAIL |
|---|---|
| 阶段 | 进行中请求的响应 |
| CLI 退出码 | 1 |
| 含义 | 收到 SIGTERM 时正在运行的请求被切断:响应结束前,连接被重置或关闭。 |
| 输出信息 |
|
| 首先检查 | 还有请求没有响应完时,不要调用 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 运行测试。这样能发现单次信号触发不到的提前退出分支。