2015-05-16 4 views
1

Посмотрите на этот пример кода, который делает копию файла в nodejs.Использование памяти Nodejs writestream

var fs = require('fs'); 
var out = fs.createWriteStream('1_GB_FILE_COPY'); 
var inp = fs.createReadStream('1_GB_FILE'); 
inp.pipe(out); 
inp.on('end', function() { 
    console.log("end"); 
}) 
process.stdin.on('data', function() {});//just to keep process alive after copy 

Все хорошо, этот код работает, и копия сделана. Во время копирования Nodejs использует около 140 МБ памяти. Но после создания копии она никогда не освобождает эту память. Это нормально? почему узел сохраняет эту память? есть ли способ заставить его сбросить его?

+0

Как вы знаете, память не освобождается? – siva636

+0

с системным монитором! он использует 140 МБ оперативной памяти даже после завершения копирования. –

ответ

0

Системный монитор дает вам очень неточное представление о том, какое использование памяти использует приложение вашего узла. Существует большая разница между тем, как ваша операционная система распределяет память на процессы и как узел управляет собственной памятью. Вы можете использовать инструменты chrome dev, чтобы лучше выглядеть. Я побежал код, принимая до и после того, как снимок памяти, по сравнению с двумя и обнаружил следующее:

enter image description here

Короче говоря, вы определенно не протекающую 140MB, как вы могли бы подумать. Чтобы увидеть это для себя, вот хороший гид, чтобы следовать:

https://github.com/felixge/node-memory-leak-tutorial

+0

Спасибо за ваш ответ! Предположим, что в экстремальной ситуации у нас было только 140 МБ свободной памяти и nodejs, которые получали ее, завершая работу, и, как вы говорите, она освобождает ее, ОС думает, что это память снова свободна или что у нее нет свободной памяти вообще? –

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