【问题标题】:Memory leak when running Nodejs socket.io on AWS EC2 t2.micro在 AWS EC2 t2.micro 上运行 Nodejs socket.io 时出现内存泄漏
【发布时间】:2016-06-21 18:34:38
【问题描述】:

我想检查 t1.micro 实例(1GB RAM)可以处理的 websocket 的最大连接数。 所以我用 nodejs(v6.2.1) 和 socket.io@1.4.6 来检查它的简单示例。

这是服务器上的代码:

require("http").globalAgent.maxSockets = Infinity;
var http = require('http').createServer(function(req, res) {});
var io = require('socket.io')(http);
io.on('connection', function(socket){
    socket.on('echo me', function (data) { //receive msg from client
        var msg = {msg: data.msg};
        io.emit('echo me', msg);
        delete msg.msg;
    });
});

var clock = setInterval(function(){
    global.gc();
}, 2000);

http.listen(3000, function(){
    console.log('listening on *:3000');
});

客户端上的代码

<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
<script type="text/javascript">
var n = 20;
var socket = [], id = [];
for(var i = 0; i < n; ++i){
    socket[i] = io('http://aws_ip_address');
    socket[i].on('connect', function(){            
        id.push(this.io.engine.id);
        console.log('Connected to Server. My name is ');
    });
    socket[i].on('echo me', function(data){ //receive message from server
        console.log(data.msg);
    });
}
var inv = setInterval(function(){
    sendEchoToServer();
}, 1000); //1 second

function sendEchoToServer(){
    for(var i = 0; i < n; ++i){
        var msg = 'My name is ' + id[i] + ' with msg: ' + Math.random();
        socket[i].emit('echo me', {msg: msg});
    }
}
</script>

我遇到的问题。当我在客户端上打开 10 个选项卡(200 个连接)时,内存会逐分钟增加。如果我打开 350 个连接,服务器将无法在 5 分钟内处理(操作系统将其杀死)。 CPU 达到 100%。

我希望它可以处理超过 500 个连接,可以吗? 提前致谢。

【问题讨论】:

  • 200 个连接每秒发送一条消息; 200 条消息/秒被广播到 200 个客户端,相当于 40.000 条消息/秒。难怪你的服务器会很忙……

标签: node.js amazon-web-services socket.io


【解决方案1】:

您可以将节点中的内存处理更改为更具侵略性。

有关可用选项的更多信息: https://gist.github.com/listochkin/10973974

node --expose-gc --optimize_for_size --max_old_space_size=460 --gc_interval=100 app.js

【讨论】:

    猜你喜欢
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    相关资源
    最近更新 更多