Node.js NodeJS-回收工人?

Node.js NodeJS-回收工人?,node.js,worker,Node.js,Worker,在研究NodeJS 8(KOA)微服务上可能存在的内存泄漏问题时,我读了一篇文章,其中建议定期回收节点群集工作线程(销毁旧工作线程,然后启动一个新工作线程)是一个好主意,因为它将清除服务运行数天或数周后可能出现的内存泄漏问题 目前,我们的微服务运行在双核(4个逻辑核)服务器上,并使用节点的群集服务为每个逻辑核增加一个工作线程(总共4个) 问题: 1) 定期回收工人真的是个好主意(甚至是必要的)吗?这是否被认为是节点社区的最佳实践 2) 摧毁一名工人可能会有什么副作用?我特别担心,如果用户当前使用

在研究NodeJS 8(KOA)微服务上可能存在的内存泄漏问题时,我读了一篇文章,其中建议定期回收节点群集工作线程(销毁旧工作线程,然后启动一个新工作线程)是一个好主意,因为它将清除服务运行数天或数周后可能出现的内存泄漏问题

目前,我们的微服务运行在双核(4个逻辑核)服务器上,并使用节点的群集服务为每个逻辑核增加一个工作线程(总共4个)

问题:

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

2) 摧毁一名工人可能会有什么副作用?我特别担心,如果用户当前使用的工作人员突然被销毁,用户的工作可能会中断?或者节点是否足够健壮,以至于被破坏的工作进程将在关闭和启动新进程之前完成其任务


FWIW:我们正在考虑在(正常情况下)没有用户的情况下,在下班时间进行工作循环。

最好只是找到并修复内存泄漏。这是一篇关于如何做的好文章

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

定期回收工人不是一个好的做法。最好是解决问题,而不是为其创建变通办法。此外,它也不被认为是节点社区的最佳实践

节点并没有那个么健壮,若你们不让代码以这种方式工作,它会等待工作进程完成它的任务。有几种方法可以让流程管理器等到流程完成其工作。这是如何利用pm2实现的


当您销毁工作进程时,用户的工作可能会中断。当然,可以通过提前禁用对工作人员的请求并等待最后一个请求得到处理来防止这种情况。

作为旁注,我有一个节点进程已经运行了3个月,没有重新启动,它的内存也没有长时间增加。在访问Grafana日志几个月后,我们发现没有内存泄漏。该服务运行了数周,内存使用情况没有发生重大变化。直到有一段奇怪的3天时间,mem使用量上升,可用交换空间减少,直到我们停止并重新启动服务。这就清除了内存/交换空间的使用,从那时起它一直运行良好。长短不一:我们认为不一定存在内存泄漏,但可能存在其他问题(可能与数据库调用有关)。不管怎样,我们已经采纳了你的建议,避免重启。