-
-
Save stefounet/2503608 to your computer and use it in GitHub Desktop.
mem leak ?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require('webkit-devtools-agent'); | |
var | |
http = require('http'), | |
extensions = ['com', 'ac', 'ad', 'ae', 'com.af', 'com.ag', 'com.ai', 'am', 'it.ao', 'com.ar', 'as', 'at', 'com.au', 'az', 'ba', 'com.bd', 'be', 'bf', 'bg', 'com.bh', 'bi', 'bj', 'com.bn', 'com.bo', 'com.br', 'bs', 'co.bw', 'com.by', 'com.bz', 'ca', 'com.kh', 'cc', 'cd', 'cf', 'cat', 'cg', 'ch', 'ci', 'co.ck', 'cl', 'cm', 'cn', 'com.co', 'co.cr', 'com.cu', 'cv', 'cz', 'de', 'dj', 'dk', 'dm', 'com.do', 'dz', 'com.ec', 'ee', 'com.eg', 'es', 'com.et', 'fi', 'com.fj', 'fm', 'fr', 'ga', 'gd', 'ge', 'gf', 'gg', 'com.gh', 'com.gi', 'gl', 'gm', 'gp', 'gr', 'com.gt', 'gy', 'com.hk', 'hn', 'hr', 'ht', 'hu', 'co.id', 'iq', 'ie', 'co.il', 'im', 'co.in', 'io', 'is', 'it', 'je', 'com.jm', 'jo', 'co.jp', 'co.ke', 'com.kh', 'ki', 'kg', 'co.kr', 'com.kw', 'kz', 'la', 'com.lb', 'com.lc', 'li', 'lk', 'co.ls', 'lt', 'lu', 'lv', 'com.ly', 'co.ma', 'md', 'me', 'mg', 'mk', 'ml', 'mn', 'ms', 'com.mt', 'mu', 'mv', 'mw', 'com.mx', 'com.my', 'co.mz', 'com.na', 'ne', 'com.nf', 'com.ng', 'com.ni', 'nl', 'no', 'com.np', 'nr', 'nu', 'co.nz', 'com.om', 'com.pa', 'com.pe', 'com.ph', 'com.pk', 'pl', 'pn', 'com.pr', 'ps', 'pt', 'com.py', 'com.qa', 'ro', 'rs', 'ru', 'rw', 'com.sa', 'com.sb', 'sc', 'se', 'com.sg', 'sh', 'si', 'sk', 'com.sl', 'sn', 'sm', 'so', 'st', 'com.sv', 'td', 'tg', 'co.th', 'com.tj', 'tk', 'tl', 'tm', 'to', 'com.tn', 'com.tr', 'tt', 'com.tw', 'co.tz', 'com.ua', 'co.ug', 'co.uk', 'us', 'com.uy', 'co.uz', 'com.vc', 'co.ve', 'vg', 'co.vi', 'com.vn', 'vu', 'ws', 'co.za', 'co.zm', 'co.zw'], | |
nbloop = 20, nblaunch = 2, done = 0, todo = nblaunch*nbloop*extensions.length; | |
console.log('We should do '+ todo +' requests'); | |
// show memused and progress while running | |
setInterval(status, 5000);status(); | |
// 2 launch | |
loop();setTimeout(loop, 10000); | |
function loop() { | |
console.log('Starting a new request loop'); | |
for(var i = 0; i < nbloop; i++) { | |
getall(); | |
} | |
} | |
function getall() { | |
// create a big buffer | |
var megabig = new Big(); | |
// this should not trigger a memory leak but it does when using http.get | |
function cb() { | |
done+=1; | |
return megabig; | |
} | |
extensions.forEach(function(ext) { | |
// using setTimeout instead of http.get shows no mem leak | |
// setTimeout(cb, 10); | |
var rq = http.get({ | |
hostname: 'www.google.' + ext, | |
pathname: '/index.html?' + Math.random(), | |
port: 80, | |
protocol: 'http:' | |
}, cb); | |
rq.end(); | |
}); | |
} | |
function Big() { | |
this.yo = (new Buffer(1 * 1024 * 1024 * 3)).toString(); | |
} | |
function status() { | |
console.log((process.memoryUsage().heapUsed/1024/1024).toFixed() + 'MB used'); | |
console.log('Done: '+ done +'/'+ todo); | |
if (done === todo) { | |
console.log('all requests done, memory should be collected by now ?') | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Duh ?
http://nodejs.org/api/http.html#http_http_get_options_callback
Do not understand, what are the MB results after this change ?