Last active
February 19, 2016 19:30
-
-
Save fengmk2/8fdbd896fee458efe0b4 to your computer and use it in GitHub Desktop.
co memory leak again
This file contains 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
// "co": "~4.1.0", | |
var co = require('co'); | |
var urllib = require('urllib'); | |
var count = 0; | |
co(function* () { | |
while (true) { | |
try { | |
yield urllib.request('http://cnpmjs.org/mirrors/apis/iojs'); | |
} catch (err) { | |
console.error(err); | |
} | |
yield sleep(10); | |
// global.gc(); | |
console.log('run %d, %smb', count++, process.memoryUsage().rss / 1024 / 1024); | |
} | |
}).catch(function (err) { | |
throw err; | |
}); | |
function sleep(ms) { | |
return function (callback) { | |
setTimeout(callback, ms); | |
}; | |
} |
This file contains 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
var http = require('http'); | |
var co = require('co'); | |
var urllib = require('urllib'); | |
var count = 0; | |
var running = false; | |
function get(url) { | |
return function (callback) { | |
http.get(url, function(res) { | |
var size = 0; | |
res.on('data', function (data) { | |
size += data.length; | |
}).on('end', function () { | |
callback(null, { | |
size: size, | |
statusCode: res.statusCode | |
}); | |
}); | |
}).on('error', callback); | |
}; | |
} | |
function getPromise(url) { | |
return new Promise(function(resolve, reject) { | |
http.get(url, function(res) { | |
var size = 0; | |
res.on('data', function (data) { | |
size += data.length; | |
}).on('end', function () { | |
resolve({ | |
size: size, | |
statusCode: res.statusCode | |
}); | |
}); | |
}).on('error', reject); | |
}); | |
} | |
function* start() { | |
if (running) { | |
return; | |
} | |
running = true; | |
var r; | |
try { | |
r = yield urllib.request('http://npm.taobao.org'); | |
// r = yield get('http://127.0.0.1:7001/'); | |
// r = yield getPromise('http://127.0.0.1:7001/'); | |
} catch (err) { | |
console.error(err.message); | |
} finally { | |
running = false; | |
} | |
count++; | |
if (count % 10 === 0) { | |
console.log('run %d, %s:%s, %smb', | |
count, r && r.status, r && r.size, process.memoryUsage().rss / 1024 / 1024); | |
} | |
} | |
var fn = co.wrap(start); | |
setInterval(function () { | |
fn.call(null).catch(function (err) { | |
throw err; | |
}); | |
}, 10); |
This file contains 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
var http = require('http'); | |
var co = require('co'); | |
var urllib = require('urllib'); | |
var counts = { | |
0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0 | |
}; | |
var runnings = {}; | |
function get(url) { | |
return function (callback) { | |
http.get(url, function(res) { | |
var size = 0; | |
res.on('data', function (data) { | |
size += data.length; | |
}).on('end', function () { | |
callback(null, { | |
size: size, | |
statusCode: res.statusCode | |
}); | |
}); | |
}).on('error', callback); | |
}; | |
} | |
function getPromise(url) { | |
return new Promise(function(resolve, reject) { | |
http.get(url, function(res) { | |
var size = 0; | |
res.on('data', function (data) { | |
size += data.length; | |
}).on('end', function () { | |
resolve({ | |
size: size, | |
statusCode: res.statusCode | |
}); | |
}); | |
}).on('error', reject); | |
}); | |
} | |
[1, 2, 3, 4, 5, 6].forEach(function (index) { | |
var fn = co.wrap(function* start() { | |
if (runnings[index]) { | |
return; | |
} | |
runnings[index] = true; | |
var r; | |
try { | |
r = yield urllib.request('http://127.0.0.1:7001'); | |
// r = yield get('http://127.0.0.1:7001/'); | |
// r = yield getPromise('http://127.0.0.1:7001/'); | |
} catch (err) { | |
console.error(err.message); | |
} finally { | |
runnings[index] = false; | |
} | |
counts[index]++; | |
if (counts[index] % 10 === 0) { | |
console.log('[#%d] run %d, %s:%s, %smb, %j', | |
index, counts[index], r && r.status, r && r.res.size, | |
process.memoryUsage().rss / 1024 / 1024, | |
process.memoryUsage()); | |
} | |
}); | |
setInterval(function () { | |
fn.call(null).catch(function (err) { | |
throw err; | |
}); | |
}, 10); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
no-loop.js gc log show old pointers too many: