Record time spent on GC in high resolution.
Yields a statistic set withmin,maxandsumof duration andsize(number of cycles).
Continuously log GC cycles and duration:
const gctime = require('gctime')
const nano = require('nanoseconds')
const diffy = require('diffy')()
const fmt = require('util').format
const stats = gctime.get()
diffy.render(function () {
// Update stats. Alternatively call .get() to get a new object.
gctime.accumulate(stats)
return fmt(
'cycles: %d. min: %dns. max: %dns. avg: %dns',
stats.size,
nano(stats.min),
nano(stats.max),
nano(stats.sum) / stats.size | 0
)
})
gctime.start()
setInterval(() => Array(1e6).fill(1), 100)
setInterval(() => diffy.render(), 500)$ node example.js
cycles: 174. min: 45488ns. max: 843813ns. avg: 131384ns
When you're done, call gctime.stop(). For a single run, you can skip get() as stop() returns stats too: stats = gctime.stop().
The statistics follow the format of process.hrtime(): an array of [seconds, nanoseconds] where nanoseconds is the remaining part of the time that can't be represented in second precision.
The state of start(), get() and stop() is global. They throw if already started or stopped, respectively.
With npm do:
npm install gctime
MIT © 2017-present Vincent Weevers. Contains 8 lines of code from Node.js © many people.