javascript - Memory leaks in node.js with concurrent sse connections -
i'm developing high-load testing tool, using eventsource npm library generate concurrent sse connections.
i use centos on digitalocean 512mb , 1cpu.
take @ code:
var http = require("http"), eventsource = require('eventsource'), opensockets = 0; http.globalagent.maxsockets = 70000; console.log(process.memoryusage() ) begintest(); function begintest (options) { (var = 0; < 50000; i++) { settimeout(formposter(i),0); } } function formposter (i) { var url = "http://remoteserver.com/examples/events/connect.sse", es = new eventsource(url); es.onmessage = function(e) { }; es.onerror = function(e) { console.log(e); }; es.onopen = function(e) { opensockets++; if (opensockets == 1 ) { console.log(process.memoryusage() ); process.exit(code=0); } }; } the problem code huge memory leak - first console.log statement outputs
{ rss: 8925184, heaptotal: 5066496, heapused: 2113192 } whereas second 1 (after first connected ) outputs { rss: 373219328, heaptotal: 296538752, heapused: 286450700 } herewith remoteserver has around 1500 connection local machine.
what reasons can cause such memory leaks?
you don't have memory leak - instantiating lot of objects @ same time , garbage collection event has not yet occurred.
the line settimeout(formposter(i),0) isn't doing think - because you're formposter, rather passing reference, timeout has no effect. calling formposter 50,000 times immediately.
in fact, if did pass function settimeout deferred execution this:
settimeout(function() { formposter(i) }) then still see same effect, deferred later execution of event loop.
Comments
Post a Comment