如何在Node.JS App中找到内存泄漏源

时间:2014-08-07 17:23:54

标签: node.js memory-leaks

我在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这样的选项?

1 个答案:

答案 0 :(得分:1)

查看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
});