Пишу паука на nodejs, столкнулся с тем, что он постоянно жрет все больше и больше памяти. Постарался привести к максимально простому виду, получилось следующее:
var humanize = require('humanize')
, request = require('request');
function fetch(url, c) {
request(url, function(err, resp, body) {
if (err) {
c(err);
return;
}
c(err, resp, body)
});
}
function callback(err, resp, body) {
var memory = process.memoryUsage();
console.log("Memory usage: " + humanize.filesize(memory.heapUsed) + " / " + humanize.filesize(memory.heapTotal));
fetch('http://google.com', callback);
}
fetch('http://google.com', callback);
После запуска используется 8.57 MB / 17.77 MB, а через 20-30 запросов уже 13.09 MB / 45.71 MB.
Почему так происходит и как избежать увеличения потребления памяти?
P.S. Пробовал писать через события, по сути те же каллбэки, но на всякий случай. Результат тот же.