在AWS EC2 t2.micro上运行Nodejs socket.io时发生内存泄漏

我想检查websocket的最大连接t1.micro实例(1GB RAM)可以处理。 所以我简单的例子来检查它与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个连接,可能吗? 先谢谢了。

您可以更改节点中的内存处理更加激进。

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

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