1.0.1 • Published 2 years ago
nodejs-inspector v1.0.1
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
post(method, params)
Communicate with Node.js by inspector protocol.start
Start the Inspector before using other API.stop
Stop the Inspector If it is no longer needed.
3.2 ThreadInspector
post(method, params)
Communicate with Node.js by inspector protocol.postToWorker(sessionId, message)
Communicate with Node.js worker_threads by inspector protocol.start
Start the Inspector before using other API.stop
Stop the Inspector If it is no longer needed.getSessions
Get worker sessions.
See more informations in https://chromedevtools.github.io/devtools-protocol/v8/ .