可能的socket.io内存泄漏

时间:2014-11-20 00:11:41

标签: node.js memory-leaks redis socket.io

将socket.io 0.9.17与redis存储一起使用,随着时间的推移,内存使用量从启动时的~150mb增加到1.0gb以上。

我使用node-heapdump拍摄了两个堆快照。一个应用程序启动后,另一个后一天。并且比较了结果,看起来最大的罪犯是字符串对象。

以下是比较截图。

enter image description here

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

enter image description here

应用程序不会崩溃,并且在开发环境中运行相同的代码时没有异常。这些字符串是传递给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);
    }
}

1 个答案:

答案 0 :(得分:1)

升级到socket.io 1.x摆脱了内存泄漏。