Record time spent on GC in high resolution.
Yields a statistic set withmin
,max
andsum
of 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.