2016-06-21 89 views
2

我想檢查t1.micro實例(1GB RAM)可以處理的websocket的最大連接數。 所以我簡單的例子用nodejs(v6.2.1)和[email protected]來檢查它。在AWS EC2上運行Nodejs socket.io時內存泄漏t2.micro

這裏是服務器的代碼:

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個連接,是否有可能? 謝謝先進。

+1

200連接; 200條消息/秒會被廣播到200個客戶端,相當於每秒40,000條消息。難怪你的服務器變得忙碌了...... – robertklep

回答