nodejs-inspector

1.0.1 • Public • Published

Node.js inspector

Inspector for Node.js process & worker_threads

1. Inspector

Inspector is a wrapper for Node.js inspector module, but with promiseify API.

1.1 takeHeapSnapshot

const { Inspector } = require('nodejs-inspector');
const inspector = new Inspector();
inspector.start();
inspector.on('HeapProfiler.addHeapSnapshotChunk', (m) => {
    //
});
await inspector.post('HeapProfiler.takeHeapSnapshot');
inspector.stop();

1.2 CPU Profile

const { Inspector, util } = require('nodejs-inspector');
const inspector = new Inspector();
inspector.start();
await inspector.post('Profiler.enable');
await inspector.post('Profiler.setSamplingInterval', { interval: 1000 });
await inspector.post('Profiler.start');
await util.sleep(1000);
const { profile } = await inspector.post('Profiler.stop');
await inspector.post('Profiler.disable');
inspector.stop();

2. Thread Inspector

Thread Inspector is a Inspector communicate with the worker_thread.

2.1 takeHeapSnapshot

const { ThreadInspector } = require('nodejs-inspector');
const { Worker } = require('worker_threads');
const worker = new Worker('setInterval(() => {}, 10000)', { eval: true });
const inspector = new ThreadInspector();
inspector.on('attachedToWorker', async (sessionContext) => {
    const { sessionId } = sessionContext.getWorkerInfo();
    sessionContext.on('HeapProfiler.addHeapSnapshotChunk', (m) => {
        // 
    });
    await inspector.postToWorker(sessionId, { method: 'HeapProfiler.takeHeapSnapshot' });
    await inspector.stop();
    worker.terminate();
});
inspector.start();

2.2 CPU Profile

const { Worker } = require('worker_threads');
const { ThreadInspector, util } = require('nodejs-inspector');
const worker = new Worker('setInterval(() => {}, 10000)', { eval: true });
const inspector = new ThreadInspector();
inspector.on('attachedToWorker', async (sessionContext) => {
    const { sessionId } = sessionContext.getWorkerInfo();
    await inspector.postToWorker(sessionId, { method: 'Profiler.enable' });
    await inspector.postToWorker(sessionId, { 
        method: 'Profiler.setSamplingInterval', 
        params: { interval: 1000 }
    });
    await inspector.postToWorker(sessionId, { method: 'Profiler.start' });
    await util.sleep(1000);
    const { profile } = await inspector.postToWorker(sessionId, { method: 'Profiler.stop' });
    await inspector.postToWorker(sessionId, { method: 'Profiler.disable' });
    await inspector.stop();
    worker.terminate();
});
inspector.start();

3. API

3.1 Inspector

  1. post(method, params) Communicate with Node.js by inspector protocol.
  2. start Start the Inspector before using other API.
  3. stop Stop the Inspector If it is no longer needed.

3.2 ThreadInspector

  1. post(method, params) Communicate with Node.js by inspector protocol.
  2. postToWorker(sessionId, message) Communicate with Node.js worker_threads by inspector protocol.
  3. start Start the Inspector before using other API.
  4. stop Stop the Inspector If it is no longer needed.
  5. getSessions Get worker sessions.

See more informations in https://chromedevtools.github.io/devtools-protocol/v8/ .

Readme

Keywords

none

Package Sidebar

Install

npm i nodejs-inspector

Weekly Downloads

52

Version

1.0.1

License

ISC

Unpacked Size

13.9 kB

Total Files

7

Last publish

Collaborators

  • theanarkh