Javascript 如何在具有无限运行任务(爬虫)的生产Nodejs应用程序中强制垃圾收集

Javascript 如何在具有无限运行任务(爬虫)的生产Nodejs应用程序中强制垃圾收集,javascript,node.js,garbage-collection,Javascript,Node.js,Garbage Collection,我正在尝试用Nodejs编写一个爬虫程序。爬虫不断地扫描链接,从这些链接收集信息,进行计算、排名、报废等 唯一的问题是内存使用量不断增长,而且永远不会被收集 我尝试过设置超时、process.nextTick()、将变量设置为null、声明全局变量、重用它们以避免垃圾等 唯一有效的方法始终是重新启动应用程序 有没有办法在生产环境中强制执行垃圾收集?如果内存泄漏,那是因为垃圾收集器不知道如何对某些对象进行垃圾收集,而不是因为垃圾收集器运行得不够。如果强制垃圾收集器运行,它仍然不会对这些对象进行垃圾

我正在尝试用Nodejs编写一个爬虫程序。爬虫不断地扫描链接,从这些链接收集信息,进行计算、排名、报废等

唯一的问题是内存使用量不断增长,而且永远不会被收集

我尝试过设置超时、process.nextTick()、将变量设置为null、声明全局变量、重用它们以避免垃圾等

唯一有效的方法始终是重新启动应用程序


有没有办法在生产环境中强制执行垃圾收集?

如果内存泄漏,那是因为垃圾收集器不知道如何对某些对象进行垃圾收集,而不是因为垃圾收集器运行得不够。如果强制垃圾收集器运行,它仍然不会对这些对象进行垃圾收集。修复内存泄漏的唯一方法是修复原因,或者终止进程并重新启动它。这不是真正的内存泄漏,爬虫程序有时会因为处理数据而出现内存峰值,但之后,内存再也不会下降。据我所知,您无法在javascript中强制垃圾收集。乔丹说的是真的。您需要修复代码。请看这篇文章(帮助某人修复他们的代码,因为垃圾收集):有很多事情可能会导致这种情况,我们不可能在没有看到你的整个代码来寻找嫌疑犯的情况下提供帮助。对导致真正泄漏的原因和导致稍后实际重用的临时内存使用的原因进行排序也很复杂。正如其他人所说,只要您使用异步I/O,手动调用GC就不太可能解决任何问题。@dannypaz谢谢,我已经看到了,但不确定它是否回答了问题。问题是爬虫程序正在运行一个“无限循环”,因此垃圾永远不会被收集。如果您对如何在nodejs上编写代码有任何想法,请创建一个无限运行的任务/循环。我买了;)