[go: up one dir, main page]

Skip to content

vweevers/gctime

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gctime

Record time spent on GC in high resolution.
Yields a statistic set with min, max and sum of duration and size (number of cycles).

npm status node Travis build status AppVeyor build status JavaScript Style Guide Dependency status

Usage

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.

Install

With npm do:

npm install gctime

License

MIT © 2017-present Vincent Weevers. Contains 8 lines of code from Node.js © many people.