如何在Node.JS App中find内存泄漏的来源

Node.js / Express应用程序中有内存泄漏。 该应用程序在3-5天后死于以下日志消息:

FATAL ERROR: JS Allocation failed - process out of memory 

我安装了一个没有用户连接的服务器,它仍然崩溃,所以我知道泄漏源于下面的代码,在后台运行同步api更改到数据库。

 poll(config.refreshInterval) function poll(refreshRate) { return apiSync.syncDatabase() .then(function(){ return wait(refreshRate) }) .then(function(){ return poll(refreshRate) }) } var wait = function wait(time) { return new Promise(function(resolve){ applog.info('waiting for %s ms..', time) setTimeout(function(){ resolve(true) },time) }) } 

有哪些技术可用于分析堆以查找所有内存的源对象?

这需要一段时间的崩溃,所以我会需要一些日志,我可以回来后分析。

有没有像Java的JVM标志-XX:HeapDumpOnOutOfMemoryError

检查node-memwatch

它提供了一个堆diff类:

 var hd = new memwatch.HeapDiff(); // your code here ... var diff = hd.end(); 

它也有事件发生器泄漏:

 memwatch.on('leak', function(info) { // look at info to find out about what might be leaking });