socket io cluster performance

After several attempt to scale my chat socket io application i hit some kind of wall when trying to establish more than 2k websocket connections on the same machine . This number seems a bit low considering that my local machine is a 8 core 6 giga of rams and during test only half the ram and the cpu is used . Being a noob to websocket and linux i might have not configured my server perfectly so far i raised max number of open files to 560000 and max number of open socket (maxconn) to 60000 with no effect .

So my question are : - Is there a limit in the number of connections that can be created locally using socket io ? - How many concurent connection have you been able to establsh on a single machine using this kind of setup ? - Are there any other linux settings to tweak in order to improve performance ?

Here 'is an example of the code that i used for the demo

    cluster = require('cluster')
,http = require('http');

//tell express how to parse post data
/*
app.use(express.json());
app.use(express.urlencoded());*/
//server.listen(9020);


if (cluster.isMaster) {

    process.on('uncaughtException', function (err) {
        console.log(err)
    });

    var numberOfCPUs = require('os').cpus().length;
    for (var i = 0; i < numberOfCPUs; i++) {
        cluster.fork();
    }

    //catch err errors and restart worker
    cluster.on('exit', function(worker, code, signal) {
        console.error('worker ' + worker.process.pid + ' died');
        cluster.fork();
    });
}

if (cluster.isWorker) {

    var authenticatedSockets = new Array();

    var server = http.createServer().listen(9020)
    ,io = require('socket.io').listen(server);

    RedisStore = require('socket.io/lib/stores/redis')
    ,redis      = require('socket.io/node_modules/redis');

    //io.set('log level', 1);
    io.set('store',  new RedisStore({
        redisPub    : redis.createClient(),
        redisSub    : redis.createClient(),
        redisClient : redis.createClient()
    }));


    toolbox = require('./utilities/toolbox.js').toolbox
    ,exception = require('./utilities/exception').exception
    ,async = require('./utilities/async.js').async;


    user = {};
    message = {};

    //tell express how to parse post data
    //app.use(express.json());
    //app.use(express.urlencoded());
    //server.listen(9020);

    process.on('uncaughtException', function (err) {
        console.log(err);
          toolbox.handleException(err);
    });

    io.sockets.on('connection', function (socket) {
        socket.on('auth', function(data){
            if (!toolbox.checkvalue(data, ['id', 'token'])) {
                socket.emit('error', {'type':'auth', 'message':'invalid credentials'});
                socket.disconnect();
                return false;
            } else {
                authenticatedSockets.push(socket);
                console.log(data.id);
                console.log(authenticatedSockets.length + 'on worker : ' + cluster.worker.id);
                console.log('-----------------');

                socket.emit('authenticated');
            }
        });
    });
}

Test results doesn't give me any error so i don't even know how to debug this i just noticed that after the 2000 socket connection the server no longer try to establish new connection but just continue to emit handshake to keep the existing connection alive

here's an example of the test output

debug: websocket writing 5:::{"name":"authenticated"}
debug: client authorized
info: handshake authorized 4uuaVHiawHt4-JUlGALu
debug: setting request GET /socket.io/1/websocket/4uuaVHiawHt4-JUlGALu?channel=chat
debug: set heartbeat interval for client 4uuaVHiawHt4-JUlGALu
debug: client authorized for 
debug: websocket writing 1::
4112
258on worker : 5
-----------------
debug: websocket writing 5:::{"name":"authenticated"}
debug: client authorized
info: handshake authorized 3jv46TzFB4cjnqsIF_3n
debug: setting request GET /socket.io/1/websocket/3jv46TzFB4cjnqsIF_3n?channel=chat
debug: set heartbeat interval for client 3jv46TzFB4cjnqsIF_3n
debug: client authorized for 
debug: websocket writing 1::
4113
259on worker : 5 //1999 connecitons after the server just keep existing connectons by emitting handshake
-----------------


    debug: websocket writing 5:::{"name":"authenticated"}
    debug: emitting heartbeat for client dkEc9fB45Gw2cOPoF_4X
    debug: websocket writing 2::
    debug: set heartbeat timeout for client dkEc9fB45Gw2cOPoF_4X
    debug: got heartbeat packet
    debug: cleared heartbeat timeout for client dkEc9fB45Gw2cOPoF_4X
    debug: set heartbeat interval for client dkEc9fB45Gw2cOPoF_4X
    debug: emitting heartbeat for client SSCX4LXmIVHNiYk1F_3_
    debug: websocket writing 2::
    debug: set heartbeat timeout for client SSCX4LXmIVHNiYk1F_3_
    debug: got heartbeat packet
    debug: cleared heartbeat timeout for client SSCX4LXmIVHNiYk1F_3_
    debug: set heartbeat interval for client SSCX4LXmIVHNiYk1F_3_
    debug: emitting heartbeat for client R5u8eM3nJGFaKCLfF_4Y
    debug: websocket writing 2::
    debug: set heartbeat timeout for client R5u8eM3nJGFaKCLfF_4Y
    debug: got heartbeat packet
    debug: cleared heartbeat timeout for client R5u8eM3nJGFaKCLfF_4Y
    debug: set heartbeat interval for client R5u8eM3nJGFaKCLfF_4Y
    debug: emitting heartbeat for client PMTMfInWBQ2B2RenF_4Z
    debug: websocket writing 2::
    debug: set heartbeat timeout for client PMTMfInWBQ2B2RenF_4Z
    debug: got heartbeat packet
    debug: cleared heartbeat timeout for client PMTMfInWBQ2B2RenF_4Z
    debug: set heartbeat interval for client PMTMfInWBQ2B2RenF_4Z
    debug: emitting heartbeat for client c6MWHHTJhzmHFwj2F_4a
    debug: websocket writing 2::