← 中文资源

简体中文版本

测试优雅关闭信号处理

断言服务在收到 SIGTERM 后停止接收新请求、排空在途请求,并在关闭期限内退出。

阅读英文原文

目标

部署时进程在收到 SIGTERM 后立即退出,导致在途请求被切断。本配方编写集成测试:先发起一个慢请求使其在途,再发送 SIGTERM,并断言该请求仍以 200 完成且进程按时退出,从而验证优雅排水;同时提醒需注册硬性截止定时器,避免关闭挂死。

步骤要点

  1. 启动服务并发起一个在途慢请求。
  2. 发送 SIGTERM 并断言在途请求仍成功完成。
  3. 断言进程在宽限期内退出。
  4. 加入硬性截止定时器防止关闭挂死。
const child = spawn('node', ['server.js']);
const slow = fetch('http://localhost:3000/slow');
await new Promise(r => setTimeout(r, 200));

排错提示

  • 信号处理器需尽早注册并先停止监听。
  • 关闭可能挂死,需要超时兜底。
  • 不覆盖负载均衡的连接排水。

适用边界

  • 不覆盖负载均衡排水。
  • 信号语义因平台而异。