【发布时间】:2015-06-10 20:32:43
【问题描述】:
我使用 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);
});
});
我是不是做错了什么?!
编辑
使用forever 启动文件后 14 小时
300 个打开的套接字和大约 500MB 的内存使用量与我的 nodejs 进程有关。
编辑
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
【问题讨论】:
标签: node.js memory-leaks socket.io