Я проектирую демона (в частности, рабочий процесс для Heroku) и код, который я медленно накапливаю в использовании плунжера. Это небольшая сумма (100 кб/10 секунд), но я знаю, что для долгосрочного использования этого процесса лучше всего поддерживать равномерность использования плунжера. Я новичок в создании процессов, разработанных для долгого времени и все еще довольно новых для разработки приложений в 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();
})();
Так с тем, что это лучший способ сохранить программу, как это работает постоянно с одинаковым количеством оперативной памяти? Какие другие соображения дизайна необходимы для того, чтобы это было достаточно хорошо, чтобы служить рабочим процессом на Хереку?
О, и для чего он это делает, он извлекает некоторые записи из экземпляра CouchDB, а затем запускает предсказание на основе этих записей.