NodeJS - 回收工人?

NodeJS - recycling workers?

在研究 NodeJS 8 (KOA) 微服务​​上可能存在的内存泄漏问题时,我读到了一篇 post,其中建议定期回收 Node Cluster worker(销毁旧的 worker,然后启动一个新的)这是一个好主意,因为它将清除服务在 运行 数天或数周后可能产生的内存泄漏问题。

目前,我们的微服务 运行 在双核(4 个逻辑核心)服务器上运行,并使用 Node 的集群服务为每个逻辑核心(总共 4 个)启动一个 worker。

问题:

1) 定期回收工人真的是一个好主意(甚至是必要的)吗?这被认为是 Node 社区的最佳实践吗?

2) 摧毁工人可能产生的副作用是什么?具体来说,我担心如果用户当前使用的 worker 突然被销毁,他们的工作可能会中断?或者 Node 是否足够健壮,以至于被破坏的工作进程将在关闭并启动新进程之前完成其任务。

FWIW:我们正在考虑在(通常)没有用户活跃的下班时间进行工作人员回收。

最好只查找并修复内存泄漏。 Here 很好 post 如何做到这一点。

维护 Node.js 项目还包括保持依赖项更新。始终考虑到不仅您自己的代码中而且依赖项中都可能存在问题。因此,检查是否有任何依赖项有更新,如果有,请检查已更改的内容并进行相应更新。

定期回收工人不是一个好习惯。最好解决问题而不是为它们创建解决方法。它也不被认为是 Node 社区中的 best-practice。

Node 不是那么健壮,如果您不让您的代码以这种方式工作,它会等待工作进程完成其任务。有多种方法可以让流程管理器等待流程完成其工作。 Here 是如何用 pm2 完成的。

正如您在销毁工人时所指出的那样,您的用户的工作可能会中断。当然有一些方法可以通过事先禁用对工作人员的请求并等到最后一个请求被处理来防止这种情况。