memory-usage
Version:
A readable stream that samples and emits memory usage over time
48 lines (38 loc) • 1.11 kB
JavaScript
var from = require('from2')
module.exports = memoryUsage
function memoryUsage (opts) {
if (!opts) return memoryUsage({})
else if (Number.isFinite(opts)) return memoryUsage({freq: opts})
else if (!opts.freq) opts.freq = 5000
var gcSample = null
var lastScheduledSample = 0
var stream = from.obj(function (size, next) {
if (gcSample) {
var result = gcSample
gcSample = null // set to null before calling next
next(null, result)
} else {
var ms = opts.freq - (Date.now() - lastScheduledSample)
setTimeout(measure, ms, next).unref()
}
})
if (opts.gc) {
var profiler = require('gc-profiler')
stream.once('resume', function () {
profiler.on('gc', function (info) {
gcSample = process.memoryUsage()
if (opts.ts) gcSample.ts = Date.now()
gcSample.gc = info.type
})
})
}
return stream
function measure (cb) {
var obj = process.memoryUsage()
lastScheduledSample = Date.now()
if (opts.ts) obj.ts = lastScheduledSample
if (opts.gc) obj.gc = null
cb(null, obj)
}
}