我在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
这样的选项?
答案 0 :(得分:1)
它提供了一个堆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
});