node.js – nodejs,socket.io简单代码内存泄漏

我使用nodejs和socket.io编写代码,用于简单的套接字应用程序(只需连接和断开连接),大约50个用户内存使用量不会变化太多,但对于最多300个用户,一小时后,内存使用量会增长(对于server.js进程接近300MB并且通过时间传递增长),看起来nodejs不释放内存.
var server = require('http').createServer();
var io = require('socket.io')(server);
var port = 9090;
var sockets = {};

server.listen(port,function () {
    console.log('Server listening at port ',port);
    //timer and logs are not problem,i tested it before.
    setInterval(function(){
      console.log(Object.keys(sockets).length+' Online Devices At '+Date());
    },1000 * 60 * 1); 
});

io.on('connection',function(socket){
    sockets[socket.id]={id:socket.id};
    console.log('connected '+socket.id + ' count ' + Object.keys(sockets).length);
    socket.on('disconnect',function (data) {
        delete sockets[socket.id];
        console.log('disconnected '+socket.id+ ' count ' +Object.keys(sockets).length);
    });
});

难道我做错了什么 ?!

编辑

永远启动文件后14小时

300个开放套接字与我的nodejs进程相关的大约500MB内存使用量.

编辑

16小时后,300个连接插座

过程停止后.

编辑

请抓住我的新代码.

var server = require('http').createServer();
var io = require('socket.io')(server);
var port = 90;
var counter = 0;
var clients = {}
server.listen(port,function () {
        console.log('Server listening at port ',port);
});
io.on("connection",function(socket){
        clients[socket.id] = socket;
        counter++;

        socket.on('disconnect',function (data) {
                counter--;
                delete clients[socket.id];
        });
});

我正在尝试使用1000个连接用户(另一个服务器是模拟用户请求和打开套接字)

启动前的内存使用率:100MB,5分钟后和1000个稳定的开放连接:400MB

解决方法

V8在释放未使用的内存时很懒,所以当它实际上只是V8没有运行其垃圾收集器时,它可能看起来像是内存泄漏.要查看是否是这种情况,请运行您的进程并设置–expose-gc标志,例如
node --expose-gc yourscript.js

并且间隔强制手动垃圾收集(我使用30秒间隔).

setInterval(function(){
  global.gc();
  console.log('GC done')
},1000*30);

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...