Skip to content

Instantly share code, notes, and snippets.

@brianloveswords
Created October 29, 2012 06:35
Show Gist options
  • Save brianloveswords/3971955 to your computer and use it in GitHub Desktop.
Save brianloveswords/3971955 to your computer and use it in GitHub Desktop.

I'm having a hard time understanding this (mainly because I don't think I understand the different types of memory allocation very well).

  • Why does the heap never increase?
  • Why does the RSS steadily increase but then never decrease?
/*
Usage:
npm install memwatch
node poisoned-stream.js 2> /dev/null
*/
var Stream = require('stream');
var util = require('util');
var memwatch = require('memwatch');
function rssUsage() {
return process.memoryUsage().rss / 1024 / 1024
}
function Streamer() {
Stream.call(this);
this.paused = true;
this.readable = true;
};
util.inherits(Streamer, Stream);
Streamer.prototype.pipe = function pipe(endpoint) {
process.nextTick(this.resume.bind(this));
return Stream.prototype.pipe.call(this, endpoint);
};
Streamer.prototype.resume = function resume() {
var n = 0;
var hd = new memwatch.HeapDiff();
var diff;
while (n++ < 1e5) {
if (n % 1000 === 0) {
diff = hd.end();
console.log('heapDiff: %s', diff.after.size);
console.log('process.memoryUsage().rss: %d mb', rssUsage());
hd = new memwatch.HeapDiff();
}
this.emit('data', 'umad?');
}
this.emit('end');
this.showUsage();
};
Streamer.prototype.showUsage = function showUsage() {
// even though we force garbage collection
setInterval(function () {
memwatch.gc();
console.log('process.memoryUsage().rss: %d mb', rssUsage());
}, 1000)
};
if (!module.parent) {
new Streamer().pipe(process.stderr);
}
heapDiff: 1.74 mb
process.memoryUsage().rss: 26.296875 mb
heapDiff: 1.69 mb
process.memoryUsage().rss: 30.33984375 mb
heapDiff: 1.69 mb
process.memoryUsage().rss: 34.75390625 mb
heapDiff: 1.7 mb
process.memoryUsage().rss: 37.4453125 mb
heapDiff: 1.7 mb
process.memoryUsage().rss: 40.31640625 mb
heapDiff: 1.71 mb
process.memoryUsage().rss: 43.6796875 mb
heapDiff: 1.71 mb
process.memoryUsage().rss: 46.51953125 mb
heapDiff: 1.71 mb
process.memoryUsage().rss: 49.609375 mb
heapDiff: 1.71 mb
process.memoryUsage().rss: 53.52734375 mb
heapDiff: 1.71 mb
process.memoryUsage().rss: 56.3671875 mb
heapDiff: 1.71 mb
process.memoryUsage().rss: 59.39453125 mb
heapDiff: 1.71 mb
process.memoryUsage().rss: 61.7578125 mb
heapDiff: 1.71 mb
process.memoryUsage().rss: 64.53125 mb
heapDiff: 1.71 mb
process.memoryUsage().rss: 67.39453125 mb
heapDiff: 1.71 mb
process.memoryUsage().rss: 70.2890625 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 73.0703125 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 75.8515625 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 78.7265625 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 81.6015625 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 84.4765625 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 87.1640625 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 89.9453125 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 92.73046875 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 95.41796875 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 98.10546875 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 101.04296875 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 103.73828125 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 106.61328125 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 109.45703125 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 112.33203125 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 115.01953125 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 117.70703125 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 120.4921875 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 123.2734375 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 125.9609375 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 128.6484375 mb
heapDiff: 1.8 mb
process.memoryUsage().rss: 131.5234375 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 134.2109375 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 137.1796875 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 139.97265625 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 142.75390625 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 145.44140625 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 148.31640625 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 151.00390625 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 153.87890625 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 156.56640625 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 159.44140625 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 162.22265625 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 165.1015625 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 167.8828125 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 170.5703125 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 173.2578125 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 176.0390625 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 178.98046875 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 181.68359375 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 184.46484375 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 187.40234375 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 190.18359375 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 192.96484375 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 195.83984375 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 198.68359375 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 201.46484375 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 204.15234375 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 207.02734375 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 209.80859375 mb
heapDiff: 1.81 mb
process.memoryUsage().rss: 212.73828125 mb
heapDiff: 1.83 mb
process.memoryUsage().rss: 215.5625 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 218.2578125 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 221.046875 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 223.90234375 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 226.69140625 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 229.57421875 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 232.26953125 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 235.05859375 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 237.94140625 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 240.63671875 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 243.33203125 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 246.02734375 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 248.87890625 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 251.73046875 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 254.51953125 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 257.21484375 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 260.20703125 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 263.08984375 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 265.97265625 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 268.85546875 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 271.55078125 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 274.24609375 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 277.1953125 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 279.984375 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 282.7734375 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 285.5625 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 288.3515625 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 291.234375 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 293.9296875 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 296.625 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 299.48046875 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 302.17578125 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 305.05859375 mb
heapDiff: 1.84 mb
process.memoryUsage().rss: 307.75390625 mb
process.memoryUsage().rss: 310.453125 mb
process.memoryUsage().rss: 310.453125 mb
process.memoryUsage().rss: 310.453125 mb
process.memoryUsage().rss: 310.453125 mb
process.memoryUsage().rss: 310.453125 mb
process.memoryUsage().rss: 310.453125 mb
process.memoryUsage().rss: 310.453125 mb
process.memoryUsage().rss: 310.453125 mb
process.memoryUsage().rss: 310.453125 mb
process.memoryUsage().rss: 310.453125 mb
process.memoryUsage().rss: 310.453125 mb
process.memoryUsage().rss: 310.453125 mb
process.memoryUsage().rss: 310.453125 mb
process.memoryUsage().rss: 310.453125 mb
process.memoryUsage().rss: 310.453125 mb
process.memoryUsage().rss: 310.453125 mb
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment