2015-02-05 5 views
0

Может кто-нибудь объяснить, почему приведенный ниже код заставляет использовать память узла и не восстанавливаться?Использование памяти узла с HTTP-запросами

Я понимаю, почему это может вызвать использование памяти, но она никогда не возвращается.

Я делаю то, что я не думаю, что это необходимо (настройка переменных на null), чтобы вызвать сбор мусора, но это не имеет значения.

Я также пробовал использовать --expose-gc и global.gc(), но это не поможет.

У меня отсутствует ссылка здесь где-то, или есть большая проблема?

var https = require("https") 

var i = 0; 
while(i < 200) { 

    var req = https.request({ 
    host: 'host.com', 
    path: '/endpoint', 
    method: 'POST', 
    headers: { 
     'Content-Type': 'text/csv', 
     'Authorization': 'Basic abc123' 
    } 
    }, function(res) { res.resume(); res=null; }); 
    req.data = "a,b,c"; 
    req.write(req.data); 
    req.end(); 
    req = null; 
    i++; 
} 

ответ

0

Узел GC является «ленивым» он стремится сохранить память в своем «старом пространстве», пока он не достигнет и жесткого предела (около 1,4/1.5Gb на 64-битном окр). В нашем случае (лот http-запросов) память становилась все выше и выше, пока не достигла этого порога, а затем была обратно до 200 МБ.

Вы можете использовать --trace-gc и --trace-gc-verbose, чтобы посмотреть, какая память используется. Вы можете установить --max-old-space-size, чтобы заставить узел иметь меньший предел, чем 1.4Gb, и тем самым чаще запускать GC (это может повлиять на perf, полный GC синхронно и заморозить поток).

Смежные вопросы