Skip to content

Instantly share code, notes, and snippets.

@shigeki
Created May 30, 2012 15:11
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save shigeki/2836908 to your computer and use it in GitHub Desktop.
Save shigeki/2836908 to your computer and use it in GitHub Desktop.
Check memory leak on socket.io
var io = require('socket.io').listen(8081);
var parser = require('socket.io').parser;
io.sockets.on('connection', function(socket) {
var pre;
var i = 0;
io.transports[socket.id].parser.on('data', function(p) {
var packet = parser.decodePacket(p);
if(packet.type === 'heartbeat') {
var memoryUsage = process.memoryUsage();
var rss = memoryUsage.rss;
var heapTotal = memoryUsage.heapTotal;
var heapUsed = memoryUsage.heapUsed;
if (pre) {
var delta = {};
delta['rss'] = rss-pre.rss;
delta['heapTotal'] = heapTotal-pre.heapTotal;
delta['heapUsed'] = heapUsed-pre.heapUsed;
if(delta.rss < 0 || delta.heapTotal < 0 || delta.heapUsed < 0) {
console.log(i, memoryUsage, 'delta:', delta );
}
}
pre = memoryUsage;
++i;
}
});
console.log('client connected');
socket.on('disconnect', function() {
console.log('client disconnected');
});
});
io.configure('development', function() {
io.set('heartbeat interval', 0.1);
io.set('log level', 0);
});
@shigeki
Copy link
Author

shigeki commented May 31, 2012

Result
node -e 'console.log(process.versions)'
{ node: '0.6.18',
v8: '3.6.6.25',
ares: '1.7.5-DEV',
uv: '0.6',
openssl: '1.0.1' }
unixjp:/tmp/socketionode test.js
info - socket.io started
client connected
93 { rss: 11591680, heapTotal: 5027296, heapUsed: 3502640 } 'delta:' { rss: 4096, heapTotal: 524288, heapUsed: -434016 }
194 { rss: 12124160, heapTotal: 5170176, heapUsed: 3547104 } 'delta:' { rss: 4096, heapTotal: 142880, heapUsed: -416068 }
311 { rss: 12214272, heapTotal: 5170176, heapUsed: 3571988 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -481880 }
429 { rss: 12230656, heapTotal: 5170176, heapUsed: 3598660 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -483576 }
547 { rss: 12242944, heapTotal: 5170176, heapUsed: 3625764 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -483580 }
664 { rss: 12259328, heapTotal: 5170176, heapUsed: 3654864 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -483748 }
782 { rss: 12271616, heapTotal: 5300736, heapUsed: 3681024 } 'delta:' { rss: 0, heapTotal: 130560, heapUsed: -484112 }
900 { rss: 12353536, heapTotal: 5300736, heapUsed: 3707880 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -483788 }
1018 { rss: 12365824, heapTotal: 5300736, heapUsed: 3734372 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -484048 }
1136 { rss: 12378112, heapTotal: 5300736, heapUsed: 3760760 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -484036 }
1251 { rss: 12398592, heapTotal: 5300736, heapUsed: 3797192 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -481168 }
1369 { rss: 12414976, heapTotal: 6471712, heapUsed: 3826752 } 'delta:' { rss: 0, heapTotal: 1170976, heapUsed: -481056 }
1610 { rss: 13021184, heapTotal: 6471712, heapUsed: 3877292 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -990048 }
1847 { rss: 13565952, heapTotal: 6471712, heapUsed: 3930112 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -971504 }
2084 { rss: 13590528, heapTotal: 6594112, heapUsed: 3980724 } 'delta:' { rss: 0, heapTotal: 122400, heapUsed: -972468 }
2322 { rss: 13680640, heapTotal: 6594112, heapUsed: 4035644 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -972676 }
2559 { rss: 13705216, heapTotal: 6594112, heapUsed: 4088056 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -972204 }
2796 { rss: 13799424, heapTotal: 6724672, heapUsed: 4138332 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -972556 }
3033 { rss: 13824000, heapTotal: 6847072, heapUsed: 4190640 } 'delta:' { rss: 0, heapTotal: 122400, heapUsed: -972548 }
/tmp/github/node/node -e 'console.log(process.versions)'
{ http_parser: '1.0',
node: '0.7.10-pre',
v8: '3.11.1',
ares: '1.7.5-DEV',
uv: '0.6',
zlib: '1.2.3',
openssl: '1.0.0f' }
unixjp:
/tmp/socketio
/tmp/github/node/node test.js
info - socket.io started
client connected
165 { rss: 12722176, heapTotal: 8232576, heapUsed: 4473320 } 'delta:' { rss: 12288, heapTotal: 1048576, heapUsed: -870816 }
333 { rss: 14213120, heapTotal: 10263936, heapUsed: 4812396 } 'delta:' { rss: 4096, heapTotal: 0, heapUsed: -794844 }
511 { rss: 14606336, heapTotal: 10263936, heapUsed: 5091004 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -855820 }
693 { rss: 14774272, heapTotal: 10263936, heapUsed: 5267516 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -853648 }
875 { rss: 14598144, heapTotal: 10263936, heapUsed: 4374072 } 'delta:' { rss: -348160, heapTotal: 0, heapUsed: -1928132 }
1071 { rss: 14602240, heapTotal: 10263936, heapUsed: 4629124 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -901220 }
1250 { rss: 14606336, heapTotal: 10263936, heapUsed: 4806356 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -838748 }
1432 { rss: 14606336, heapTotal: 10263936, heapUsed: 4976116 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -850560 }
1613 { rss: 14651392, heapTotal: 12361088, heapUsed: 5148352 } 'delta:' { rss: 36864, heapTotal: 2097152, heapUsed: -852704 }
1994 { rss: 15818752, heapTotal: 12361088, heapUsed: 5512352 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -1784196 }
2362 { rss: 17039360, heapTotal: 12361088, heapUsed: 5875796 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -1703584 }
2624 { rss: 17338368, heapTotal: 12361088, heapUsed: 7339076 } 'delta:' { rss: -4096, heapTotal: 0, heapUsed: 14996 }
2733 { rss: 17395712, heapTotal: 12361088, heapUsed: 6235204 } 'delta:' { rss: 0, heapTotal: 0, heapUsed: -1707464 }
3104 { rss: 17776640, heapTotal: 13376768, heapUsed: 6611072 } 'delta:' { rss: 0, heapTotal: 1015680, he

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment