将socket.io 0.9.17与Redis存储一起使用,随着时间的推移,内存使用量将从启动时的〜150mb增长到超过1.0gb。
我使用node-heapdump拍摄了2个堆快照。应用启动后一个,一天后另一个。并比较了结果,看起来最大的罪魁祸首是字符串对象。
下面是比较的屏幕截图。
当我扩展字符串对象时,我看到的只是一些跟踪和一个uncaughtException。
该应用程序不会崩溃,并且在开发环境上运行相同的代码也不例外。这些字符串是事件,这些事件传递到socket.io并通过redis存储分发到节点。相关代码如下
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);
}
}
升级到socket.io 1.x摆脱了内存泄漏。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句