如何在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 });