使用带有redis存储的socket.io 0.9.17,随着时间的推移,内存使用量从启动时的~150 to增加到超过1.0gb。
我使用节点堆转储拍摄了2个堆快照。一个接着一个应用程序启动,另一个在一天后开始。比较结果,看起来最大的违法者是字符串对象。
下面是比较的截图。

当我展开字符串对象时,我看到的只是一些跟踪和一个uncaughtException。

该应用程序不会崩溃,在dev环境中运行相同的代码时也没有例外。这些字符串是通过redis存储传递给socket.io并分发给节点的事件。这方面的相关代码如下
var result = {
posts: [postData],
privileges: {
'topics:reply': true
},
'reputation:disabled': parseInt(meta.config['reputation:disabled'], 10) === 1,
'downvote:disabled': parseInt(meta.config['downvote:disabled'], 10) === 1,
};
for(var i=0; i<uids.length; ++i) {
if (parseInt(uids[i], 10) !== socket.uid) {
websockets.in('uid_' + uids[i]).emit('event:new_post', result);
}
}发布于 2015-01-22 05:14:33
升级到socket.io 1.x消除了内存泄漏。
https://stackoverflow.com/questions/27029504
复制相似问题