article
Why co use too many memory
Why co use too many memory
Why co use too many memory
var co = require("co");
var urllib = require("urllib");
var count = 0;
co(function* () {
while (true) {
try {
yield urllib.request("http://www.baidu.com");
} catch (err) {
console.error(err.message);
}
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);
};
}
var co = require("co");
var urllib = require("urllib");
var count = 0;
var running = false;
function* start() {
if (running) {
return;
}
running = true;
var r;
try {
r = yield urllib.requestThunk("http://www.baidu.com");
} catch (err) {
console.error(err.message);
} finally {
running = false;
}
count++;
if (count % 10 === 0) {
console.log("run %d, %j, %smb", count, r && r.status, process.memoryUsage().rss / 1024 / 1024);
}
}
var fn = co.wrap(start);
setInterval(function () {
fn.call(null).catch(function (err) {
throw err;
});
}, 10);
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 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(index) {
if (running) {
return;
}
running = 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 {
running = false;
}
counts[index]++;
if (counts[index] % 100 === 0) {
console.log(
"[#%d] run %d, %s:%s, %smb",
index,
counts[index],
r && r.status,
r && r.size,
process.memoryUsage().rss / 1024 / 1024,
);
}
}
var fn = co.wrap(start);
setInterval(function () {
fn.call(null, 1).catch(function (err) {
throw err;
});
}, 10);
setInterval(function () {
fn.call(null, 2).catch(function (err) {
throw err;
});
}, 10);
setInterval(function () {
fn.call(null, 3).catch(function (err) {
throw err;
});
}, 10);
setInterval(function () {
fn.call(null, 4).catch(function (err) {
throw err;
});
}, 10);
setInterval(function () {
fn.call(null, 5).catch(function (err) {
throw err;
});
}, 10);
setInterval(function () {
fn.call(null, 6).catch(function (err) {
throw err;
});
}, 10);
Comments