【问题标题】:Node.js high virtual memory usageNode.js 高虚拟内存使用率
【发布时间】:2011-07-18 11:30:34
【问题描述】:

我们正在尝试设置 Node.js + Socket.io。我们最后关心的是内存使用。我们正在启动我们的简单服务器(代码如下),该进程的虚拟内存使用量约为 600 mb。

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]);
                }
        }
  });
});

正常吗?这么大的虚拟内存占用?

编辑:

好的,我发现这很正常。 http://comments.gmane.org/gmane.comp.lang.javascript.nodejs/17482

【问题讨论】:

    标签: javascript node.js socket.io


    【解决方案1】:

    是的,这很正常。 Node 通常不会很好地释放它的缓冲区。 IIRC:它们必须从 v8 中释放出来,然后从节点的堆中释放出来,最后回到操作系统,这里的东西非常慢。

    尝试下载一个允许您显式调用垃圾收集器的模块。我怀疑节点没有向 v8 报告缓冲区的大小,而 v8 假设它们很小并且没有释放它们。

    【讨论】:

    • 关于该模块和用途的任何信息?
    猜你喜欢
    • 2020-09-12
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2013-10-21
    • 2016-01-24
    • 2012-03-13
    • 2012-05-31
    相关资源
    最近更新 更多