在研究NodeJS 8(KOA)微服务上可能存在的内存泄漏问题的同时,我读了一篇文章,其中建议定期回收Node Cluster工作人员(摧毁旧工作者,然后开始新工作)是一个好主意,因为它会清理服务可能在运行数天或数周后累积的内存泄漏问题。
目前,我们的微服务运行在双核(4个逻辑核心)服务器上,并使用Node的群集服务在每个逻辑核心(总共4个)中旋转一个工作站。
问题:
1)定期回收工人真的是一个好主意(甚至是必要的)吗?这被认为是Node社区中的最佳实践吗?
2)摧毁工人可能产生哪些副作用?具体而言,我担心如果当前使用的工人突然被销毁,用户可能会中断他们的工作?或者Node是否足够强大,以至于被破坏的工作进程在关闭和启动新进程之前将完成其任务。
FWIW:我们正在考虑在(通常)没有用户活跃的情况下让工人在非工作时间内回收。
答案 0 :(得分:1)
最好找到并修复内存泄漏。 Here是如何做到这一点的好帖子。
维护Node.js项目还包括更新依赖项。始终考虑到不仅在您自己的代码中而且在依赖项中都存在问题。因此,检查是否有任何依赖项有更新,如果是,请检查已更改的内容并相应地更新。
定期回收工人不是一个好习惯。最好解决问题而不是为它们创建变通方法。此外,它不被认为是节点社区中的最佳实践。
如果不使代码以这种方式工作,节点就不会等待工作进程完成其任务。有一些方法可以让流程管理器等到流程完成其工作。 Here是如何用pm2完成的。
当你摧毁一名工人时,你的用户可能会让他们的工作中断。当然有办法如何通过事先禁用对工作人员的请求并等到最后一个请求被处理来防止这种情况。