我的公司正在与一些问题作斗争。node.exe占用了太多的内存和CPU。
服务器如下所示:
var userList = [];
/* NODE.JS */
var server = require('http').createServer(function (req, res) {
res.writeHead(200);
res.end('ok');
}).listen((process.env.PORT || 88));
/* SOCKET.IO */
//var io = require('socket.io')(server);
var io = require('socket.io')(server);
io.on('connection', function (socket) {
socket.on('connectUser', function (user) {
if (!isAuthenticated(user.user, user.pass)) {
socket.disconnect(socket.conn.id);
} else {
//Session des Users
user.session = socket.conn.id;
//if (userList.indexOf(user)== -1)
userList.push(user);
io.emit('userOnline', {onlineUser: userList});
}
});
socket.on('sendMessageToUser', function (sendObj) {
if(sendObj && sendObj.to) {
var userArr = userList.filter(function(val, index, arr) {
if(sendObj.to.indexOf(val.id) > -1)
return val;
});
userArr.forEach(function(user) {
socket.to(user.session).emit('getMessageFromUser', sendObj);
});
}
});
socket.on('disconnect', function () {
userList = userList.filter(function(val, index, arr) {
if(val.session !== socket.conn.id)
return val;
});
io.emit('userOnline', {onlineUser: userList});
});
});
function isAuthenticated(user, pass) {
return true;
}当用户连接时(每次页面访问)将连接到服务器。userList将填充有关该用户的信息。离开页面或刷新后,用户将从该对象中删除。
该服务器还托管另一个node.js应用程序。在启动我的脚本后,另一个应用程序的内存和CPU也在上升!
有没有人能确认这是个bug?或者我必须将两个应用程序区别对待?
我的服务器是这样的: iisnode (v0.2.18.0) node (v0.12.4) npm (v2.10.1) socket.io (v1.3.5)
我知道他们中的大多数都已经过时了!我还没有时间在iisnode下测试当前的版本。
发布于 2016-05-04 01:18:19
如何删除用户?如果处理不当,可能会出现内存泄漏。
最好的方法是分析您的节点进程并查看保留了哪些值,它们将为您指出内存泄漏的原因。你可以在这里阅读更多关于如何做到这一点的内容:http://www.alexkras.com/simple-guide-to-finding-a-javascript-memory-leak-in-node-js/
https://stackoverflow.com/questions/37003449
复制相似问题