Подтвердить что ты не робот

Node.js высокая загрузка виртуальной памяти

Мы пытаемся настроить Node.js + Socket.io. Наша последняя проблема - использование памяти. Мы начинаем наш простой сервер (код ниже), а использование виртуальной памяти этого процесса составляет ~ 600 мб.

1000      6463  0.0  0.4 635816 19260 pts/1    Sl+  12:51   0:00 node /home/data/server.js

server.js

var express = require('express');
var app = express.createServer(), io = require('socket.io').listen(app);

app.listen(8000);

io.set('flash policy port', 8001);
io.enable('browser client minification');  // send minified client
io.enable('browser client etag');          // apply etag caching logic based on version number
io.set('log level', 1);
io.set('transports', [
    'websocket'
  , 'flashsocket'
  , 'htmlfile'
  , 'xhr-polling'
  , 'jsonp-polling'
  ]);

io.sockets.on('connection', function (socket) {
  socket.on('distribute', function (data) {
        if(typeof data.key == 'undefined' || (typeof data.key != 'undefined' && data.key != 'randomstringforsecurityreason')){
                return false;
        }
        delete data.key;
        socket.broadcast.to(data.channel).emit('eat', data);
  });

  socket.on('pukpuk', function(data) {
        if(typeof data == "string"){
                socket.join(data);
        } else {
                for(var i in data)
                {
                    socket.join(data[i]);
                }
        }
  });
});

Это нормально? Настолько большое использование виртуальной памяти?

Edit:

Хорошо, я обнаружил, что это довольно нормально. http://comments.gmane.org/gmane.comp.lang.javascript.nodejs/17482

4b9b3361

Ответ 1

Да, это очень нормально. Node не часто освобождает буфер. IIRC: Они должны быть освобождены от v8, затем от кучи Node, а затем, наконец, вернуться в ОС, что-то здесь очень медленно.

Попробуйте загрузить модуль, позволяющий явно вызывать сборщик мусора. Я подозреваю, что Node не сообщает размер буферов на v8, а v8 предполагает, что они крошечные и не освобождают их.