4
我正在設計一個守護進程(特別是Heroku的工作進程)和我已經在RAM內使用緩慢積累的代碼。這是一個很小的數量(100kb/10秒),但我知道爲了長期使用這個過程,最好保持RAM的使用一致。我對創建運行很長時間的流程很陌生,對於在Node和Javascript中開發應用程序仍然很新穎。這裏是我的大部分代碼:內存泄漏Node.js程序
////////////////
// 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的不斷運行的程序的最佳方式?還有哪些其他設計考慮因素對於保持這種運行狀態足以在Heroku上充當工作進程至關重要?
哦,至於它做了什麼,它會從CouchDB實例中提取一些條目,然後根據這些條目運行預測。