内存泄漏Node.js程序

我正在devise一个守护进程(特别是Heroku的一个工作进程),而且我已经慢慢积累了内存使用的代码。 这是less量的(100kb / 10秒),但是我知道为了长期使用这个过程,最好保持RAM的使用一致。 我对创build运行很长时间的stream程很陌生,对于在Node和Javascript中开发应用程序还是很新的。 这里是我的大部分代码:

//////////////// // Queue Loop // //////////////// var worker = (function() { var buffer = ""; var couchdb = http.get({ auth: db_user + ":" + db_pass, host: db_host, path: '/queue/_all_docs?include_docs=true', port: db_port }, function( response ) { response.setEncoding('utf8'); response.on("data", function( data ) { buffer += data; }); response.on("end", function() { var queue = JSON.parse(buffer); if ( !queue.error ) { buffer = ""; couchdb = http.get({ auth: db_user + ":" + db_pass, host: db_host, path: '/flights/_all_docs?include_docs=true', port: db_port }, function( response ) { response.setEncoding('utf8'); response.on("data", function(data) { buffer += data; }); response.on("end", function() { var flights = JSON.parse(buffer); if ( !flights.error ) { for ( row in queue.rows ) { console.log(queue.rows[row].doc.flight); } for ( row in flights.rows ) { console.log(flights.rows[row].doc.program); } setTimeout( worker, 10000 ); } else { // db error } }); }).on("error", function() { setTimeout( worker, 10000 ); }); } else { // db error } }); }).on("error", function() { console.error("CouchDB is currently not available."); setTimeout( worker, 10000 ); }); }); /////////////// // Run Queue // /////////////// (function() { worker(); })(); 

那么,保持这样一个程序的最好方法是用同样数量的ram不断运行? 还有什么其他的devise考虑对保持这个运行足够好,以作为Heroku上的工作进程是必不可less的?

哦,至于它做了什么,它会从CouchDB实例中提取一些条目,然后根据这些条目运行预测。

事实certificate,Node.js提供了一个很好的函数process.nextTick()来清除调用栈(编辑:这可能不是这种情况,但它有助于积累)。 通过将所有的呼叫包装到工作中,我可以防止理论堆栈溢出(这种情况没有发生,但是我的内存使用量不断增长)。

我对这个function的理解不是很深,但是它是做我一直想要做的。

(编辑:发现节点有通过V8的FANTASTIC垃圾回收,它运行在奇怪的时间间隔!)

阅读次数: