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?
I'm having a hard time understanding this (mainly because I don't think I understand the different types of memory allocation very well).
/* | |
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 |