Skip to content

A simple node module to access V8 inspector + some tools to export and read the data.

License

Notifications You must be signed in to change notification settings

wallet77/v8-inspector-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

08bc3f7 · Jan 10, 2025

History

88 Commits
Nov 27, 2023
Jun 10, 2021
Jun 10, 2021
Jul 15, 2019
Jun 10, 2021
Dec 22, 2022
Dec 22, 2022
Oct 3, 2019
Jun 1, 2021
Jul 15, 2019
Jan 10, 2025
Jan 10, 2025
Nov 27, 2023
Jun 10, 2021

Repository files navigation

GitHub release GitHub license

CI pipeline Code coverage Opened issues Opened PR DeepScan grade Node version

Purpose

Simple wrapper around "inspector" module. Basically it adds :

  • promises & async/await syntax
  • S3 exporter

Compatibility

Version Supported Tested
20.x yes yes
18.x yes yes
16.x yes yes

In order to have all features we recommend to use at least Node.js version 10 or higher.

Installation

$ npm install inspector-api --save

Usage

CPU profiling

const Inspector = require('inspector-api')
const inspector = new Inspector()

await inspector.profiler.enable()
await inspector.profiler.start()
// Invoke business logic under measurement here...

// some time later...
await inspector.profiler.stop()

Memory sampling

const Inspector = require('inspector-api')
const inspector = new Inspector()

await inspector.heap.enable()
await inspector.heap.startSampling()
// Invoke business logic under measurement here...

// some time later...
await inspector.heap.stopSampling()

Memory snapshot

const Inspector = require('inspector-api')
const inspector = new Inspector()

await inspector.heap.takeSnapshot()

Code coverage

const Inspector = require('inspector-api')
const inspector = new Inspector()

await inspector.profiler.enable()
await inspector.profiler.startPreciseCoverage({ callCount: true, detailed: true })

const data = await inspector.profiler.takePreciseCoverage()
await inspector.profiler.stopPreciseCoverage()

Use S3 exporter

const Inspector = require('inspector-api')
const inspector = new Inspector({
    storage: {
        type: 's3',
        bucket: 'testBucket',
        dir: 'inspector'
    }
})

await inspector.profiler.enable()
await inspector.profiler.start()
// Invoke business logic under measurement here...

// some time later...
await inspector.profiler.stop()

Warning: it seems that the new AWS SDK leads to unexpected error if you use the takeSnapshot method (you should use memory sampling)

Constructor's config

new inspector([config])

config.storage

Option description Default value
type Storage type (raw, s3 or fs) raw
bucket S3 bucket's name none
dir Directory where to store the file none

If you use fs, the generated data will be store on the disk in your default tmp directory. You can display it in Node.js with the command require('os').tmpdir()

Test

$ npm test

Coverage report can be found in coverage/.