JSON.stringify节点服务器内存泄漏

时间:2013-11-14 07:24:29

标签: node.js memory memory-leaks stringify

在我的node.js服务器的内存堆快照中,我注意到由于此函数产生的字符串,我正在泄漏大量的内存:

User.prototype._friends = function(friends) {

this.friends = friends;
this.send(JSON.stringify({
    type: 'hello',
    username: this.data('username'),
    friends: friends
}));
};

这是另外两个发送功能。它从.send到._send。

User.prototype.send = function(code, message, callback) {

this._send('listener', code, message, callback);
};

User.prototype._send = function(type, code, message, callback) {

if(!message && typeof code != 'number') {

    callback = message;
    message = code;
    code = 200;
}

if(typeof message != 'string')
    message = JSON.stringify(message);

if(type == 'connection' && this.connection) {

    this.connection.writeHead(code || 200, {
        'Content-Type': 'application/json',
        'Content-Length': message.length
    });
    this.connection.end(message);
message = null;
return;
} else {

    if(!this.listeners.length) //???? WHY
        return this.message_queue.push(arguments);

    var cx = this.listeners.slice(), conn;
    this.listeners = [];
    while(conn = cx.shift()) {

        conn.writeHead(code || 200, {
            'Content-Type': 'application/json',
            'Content-Length': message.length
        });
        conn.end(message);
    }
    if(callback) {
   callback();
   message = null;
}
else{//added this in...
   message = null;
   return; 
} 
}
};

占用大部分内存的消息类型为“Hello”。 _friends由另一个中间件文件中的代码调用,该文件将通过Ajax调用从php服务器放入信息。不确定那是多么相关,因为内存泄漏看起来像是在那一步之后。任何指向正确方向的人都会非常感激。

0 个答案:

没有答案