首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SIGTERM事件之后:进程继续接收请求

SIGTERM事件之后:进程继续接收请求
EN

Stack Overflow用户
提问于 2021-02-27 19:43:07
回答 1查看 348关注 0票数 1

我已经创建了一个最小的速成POC,它只有一个基本路径,在30岁后发送hello world,使用setTimeout。

我发送了一个HTTP请求并开始等待。同时,我跟踪节点的PID并从终端杀死它。

SIGTERM事件的触发和处理方式如下:

代码语言:javascript
运行
复制
process.on('SIGTERM', () => {
  console.log(`[SIGTERM received]`)
  console.log(`[closing http server]`)
  server.close(() => {
    console.log(`[Http server closed]`)
    process.exit(0)
  })
})

出现了前两个日志,如果我试图设置另一个http请求,它就失败了。这正是我想要的。但是,当第一个http请求最终完成并返回时,可能还有3-5秒的间隙,我可以线程另一个http请求!然后,它可以等待另一个30岁,完成,然后我可以设置另一个,等等。

例如,如果有大量请求,k8s将不体面地关闭它,所有这些请求都将失败(达到超时)。

为什么会发生这种情况,它是否是Nodejs v14中的一个bug?当最后一个http请求结束时,进程应该立即停止,永远不会收到任何类型的请求。然后告诉像k8s这样的管理人员,容器现在停止了,并且允许它终止容器。

全面的行为应该是这样的:

假设我们只有一个吊舱。

然后我们升级版本。

K8S开始创建一个新的荚,当新的荚被创建时,它停止将任何新请求路由到旧的请求。

它不能也不应该终止旧舱,除非它清楚地表明他已经完成了最后一次http请求的服务。

然后旧吊舱应该终止,我们有一个零停机时间-核心原因之一使用K8S。

EN

回答 1

Stack Overflow用户

发布于 2022-11-01 06:57:21

确保您的应用程序进程从PID 1开始。

我为同样的问题挣扎了很长时间。我已经详细回答了here

信号被发送到每个容器中的主进程(PID 1),而不是在所有进程上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66402824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档