[eggjs/egg]一段时间后worker不响应请求

2025-11-04 955 views
7
What happens?

系统发布到生产后,运行一段时间(有时候可以几个月,有时候也许就几分钟)后,无法再响应Http请求,但是用ps看,发现所有的进程都很正常。

比如,2个同样程序和服务器的节点,1个好好运行,另一个出现类似问题,重启后又都正常。当然也可能都堵塞了。

不知道有没有遇到相关问题的朋友。

Context Node Version: 9.11.2 Egg Version: 2.15.1

回答

8

抱歉,暂时无法提供最小可复现代码。我自己在本地也无法复现,只是很偶尔在线上会出现,所以我无从抽取出代码来做成小的代码库。我只是想问问有没有人遇到过此类问题,能给点参考意见。我自己也在寻找定位问题的方向。

2

看描述很像是用户异常请求触发了进程死循环(比如正则回溯),可以接入 alinode 后做下 cpu profile 或者诊断报告看下不再响应的时候进程阻塞点,参考 类死循环导致进程阻塞

5

@hyj1991 谢谢 这边在排查下代码等

6

貌似 @miser 和我遇到同样的问题,我正在接入 alinode 看能不能在出问题时抓到相关信息。但是接入了 alinode,重新发布后,并不能重现这个问题,不知道什么时候会再重现……

https://github.com/eggjs/egg/issues/3769

6

我们服务节点在国外aws上,alinode对国外支持不好,前些天出问题的时候没有收录到详细数据,没办法更为详细的提供信息。

登录上docker 用ss命令看了下,大量的close_wait 状态堵塞住了,应该是其它的服务器调用我们node服务(我们存在于众多微服务中),然后出于一些未知原因没有正常结束TCP(正常是会自动4次断开或者TCP RST信号断开),导致服务端堵塞无法继续响应后续请求,之后调整的服务器的超时时间最近没有相关问题。

5

我们服务节点在国外aws上,alinode对国外支持不好,前些天出问题的时候没有收录到详细数据,没办法更为详细的提供信息。

登录上docker 用ss命令看了下,大量的close_wait 状态堵塞住了,应该是其它的服务器调用我们node服务(我们存在于众多微服务中),然后出于一些未知原因没有正常结束TCP(正常是会自动4次断开或者TCP RST信号断开),导致服务端堵塞无法继续响应后续请求,之后调整的服务器的超时时间最近没有相关问题。

目前 alinode 确实没有提供海外的节点,所以网络互通上存在问题。