我在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标志-XX:HeapDumpOnOutOfMemoryError这样的选项?
发布于 2014-08-08 01:28:05
它提供了一个heap 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
});https://stackoverflow.com/questions/25188555
复制相似问题