Node.js v21.7.2 ドキュメント
- Node.js v21.7.2
- ► 目次
-
► インデックス
- アサーションテスト
- 非同期コンテキスト追跡
- 非同期フック
- バッファ
- C++ アドオン
- Node-API を使用した C/C++ アドオン
- C++ エンベッダーAPI
- 子プロセス
- クラスタ
- コマンドラインオプション
- コンソール
- Corepack
- 暗号化
- デバッガ
- 非推奨API
- 診断チャネル
- DNS
- ドメイン
- エラー
- イベント
- ファイルシステム
- グローバルオブジェクト
- HTTP
- HTTP/2
- HTTPS
- インスペクタ
- 国際化
- モジュール:CommonJS モジュール
- モジュール:ECMAScript モジュール
- モジュール:
node:module
API - モジュール:パッケージ
- ネットワーク
- OS
- パス
- パフォーマンスフック
- パーミッション
- プロセス
- Punnycode
- クエリ文字列
- Readline
- REPL
- レポート
- 単一実行可能アプリケーション
- ストリーム
- 文字列デコーダ
- テストランナー
- タイマー
- TLS/SSL
- トレースイベント
- TTY
- UDP/データグラム
- URL
- ユーティリティ
- V8
- VM
- WASI
- Web Crypto API
- Web Streams API
- ワーカー スレッド
- Zlib
- ► その他のバージョン
- ► オプション
トレースイベント#
ソースコード: lib/trace_events.js
node:trace_events
モジュールは、V8、Node.js コア、およびユーザースペースコードによって生成されたトレース情報を一元管理するメカニズムを提供します。
トレースは、--trace-event-categories
コマンドラインフラグを使用するか、node:trace_events
モジュールを使用して有効にできます。--trace-event-categories
フラグは、コンマ区切りのカテゴリ名のリストを受け入れます。
使用可能なカテゴリは次のとおりです。
node
:空のプレースホルダー。node.async_hooks
:詳細なasync_hooks
トレースデータのキャプチャを有効にします。async_hooks
イベントには、一意のasyncId
と特別なtriggerId
triggerAsyncId
プロパティがあります。node.bootstrap
:Node.js ブートストラップの重要な時点のキャプチャを有効にします。node.console
:console.time()
とconsole.count()
出力のキャプチャを有効にします。node.threadpoolwork.sync
:blob
、zlib
、crypto
、node_api
などのスレッドプール同期操作のトレースデータのキャプチャを有効にします。node.threadpoolwork.async
:blob
、zlib
、crypto
、node_api
などのスレッドプール非同期操作のトレースデータのキャプチャを有効にします。node.dns.native
:DNS クエリに関するトレースデータのキャプチャを有効にします。node.net.native
:ネットワークに関するトレースデータのキャプチャを有効にします。node.environment
:Node.js 環境の重要な時点のキャプチャを有効にします。node.fs.sync
:ファイルシステム同期メソッドのトレースデータのキャプチャを有効にします。node.fs_dir.sync
:ファイルシステム同期ディレクトリメソッドのトレースデータのキャプチャを有効にします。node.fs.async
:ファイルシステム非同期メソッドのトレースデータのキャプチャを有効にします。node.fs_dir.async
:ファイルシステム非同期ディレクトリメソッドのトレースデータのキャプチャを有効にします。node.perf
:パフォーマンスAPI 測定値のキャプチャを有効にします。node.perf.usertiming
:パフォーマンスAPI ユーザタイミング測定とマークのみのキャプチャを有効にします。node.perf.timerify
:パフォーマンスAPI timerify 測定値のみのキャプチャを有効にします。
node.promises.rejections
:未処理のPromise拒否と拒否後の処理の数のトレースデータ追跡を有効にします。node.vm.script
:node:vm
モジュールのrunInNewContext()
、runInContext()
、runInThisContext()
メソッドのトレースデータのキャプチャを有効にします。v8
:V8 イベントは、GC、コンパイル、および実行関連です。node.http
:http リクエスト/レスポンスのトレースデータのキャプチャを有効にします。
デフォルトでは、node
、node.async_hooks
、v8
カテゴリが有効になっています。
node --trace-event-categories v8,node,node.async_hooks server.js
以前のバージョンのNode.jsでは、トレースイベントを有効にするために--trace-events-enabled
フラグを使用する必要がありました。この要件は削除されました。ただし、--trace-events-enabled
フラグは使用できます。デフォルトでnode
、node.async_hooks
、v8
トレースイベントカテゴリを有効にします。
node --trace-events-enabled
# is equivalent to
node --trace-event-categories v8,node,node.async_hooks
または、node:trace_events
モジュールを使用してトレースイベントを有効にすることができます。
const trace_events = require('node:trace_events');
const tracing = trace_events.createTracing({ categories: ['node.perf'] });
tracing.enable(); // Enable trace event capture for the 'node.perf' category
// do work
tracing.disable(); // Disable trace event capture for the 'node.perf' category
トレースを有効にしてNode.jsを実行すると、Chromeのchrome://tracing
タブで開くことができるログファイルが生成されます。
ログファイルはデフォルトでnode_trace.${rotation}.log
と呼ばれ、${rotation}
はインクリメントされるログローテーションIDです。ファイルパスパターンは、${rotation}
と${pid}
をサポートするテンプレート文字列を受け入れる--trace-event-file-pattern
で指定できます。
node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js
SIGINT
、SIGTERM
、SIGBREAK
などのシグナルイベントの後でもログファイルが正しく生成されるようにするには、次のような適切なハンドラーをコードに用意してください。
process.on('SIGINT', function onSigint() {
console.info('Received SIGINT.');
process.exit(130); // Or applicable exit code depending on OS and signal
});
トレースシステムは、process.hrtime()
で使用されているものと同じ時間ソースを使用します。ただし、トレースイベントのタイムスタンプはマイクロ秒で表現され、ナノ秒を返すprocess.hrtime()
とは異なります。
このモジュールの機能は、Worker
スレッドでは使用できません。
node:trace_events
モジュール#
Tracing
オブジェクト#
Tracing
オブジェクトは、カテゴリのセットのトレースを有効または無効にするために使用されます。インスタンスは、trace_events.createTracing()
メソッドを使用して作成されます。
作成時に、Tracing
オブジェクトは無効になっています。tracing.enable()
メソッドを呼び出すと、カテゴリが有効なトレースイベントカテゴリのセットに追加されます。tracing.disable()
を呼び出すと、カテゴリが有効なトレースイベントカテゴリのセットから削除されます。
tracing.categories
#
このTracing
オブジェクトが対象とするトレースイベントカテゴリのコンマ区切りのリスト。
tracing.disable()
#
このTracing
オブジェクトを無効にします。
他の有効なTracing
オブジェクトによって対象とされていないトレースイベントカテゴリ、および--trace-event-categories
フラグで指定されていないカテゴリのみが無効になります。
const trace_events = require('node:trace_events');
const t1 = trace_events.createTracing({ categories: ['node', 'v8'] });
const t2 = trace_events.createTracing({ categories: ['node.perf', 'node'] });
t1.enable();
t2.enable();
// Prints 'node,node.perf,v8'
console.log(trace_events.getEnabledCategories());
t2.disable(); // Will only disable emission of the 'node.perf' category
// Prints 'node,v8'
console.log(trace_events.getEnabledCategories());
tracing.enable()
#
Tracing
オブジェクトが対象とするカテゴリのセットに対して、このTracing
オブジェクトを有効にします。
tracing.enabled
#
- <ブール値>
Tracing
オブジェクトが有効になっている場合のみtrue
。
trace_events.createTracing(options)
#
options
<オブジェクト>categories
<文字列[]> トレースカテゴリ名の配列。配列に含まれる値は、可能な限り文字列に変換されます。値を変換できない場合はエラーがスローされます。
- 戻り値:<Tracing>。
指定されたcategories
のセットに対してTracing
オブジェクトを作成して返します。
const trace_events = require('node:trace_events');
const categories = ['node.perf', 'node.async_hooks'];
const tracing = trace_events.createTracing({ categories });
tracing.enable();
// do stuff
tracing.disable();
trace_events.getEnabledCategories()
#
- 戻り値:<文字列>
現在有効になっているすべてのトレースイベントカテゴリのコンマ区切りのリストを返します。現在有効になっているトレースイベントカテゴリのセットは、現在有効になっているすべてのTracing
オブジェクトと、--trace-event-categories
フラグを使用して有効になっているカテゴリの和集合によって決定されます。
以下のtest.js
ファイルとコマンドnode --trace-event-categories node.perf test.js
を例とすると、コンソールに'node.async_hooks,node.perf'
が出力されます。
const trace_events = require('node:trace_events');
const t1 = trace_events.createTracing({ categories: ['node.async_hooks'] });
const t2 = trace_events.createTracing({ categories: ['node.perf'] });
const t3 = trace_events.createTracing({ categories: ['v8'] });
t1.enable();
t2.enable();
console.log(trace_events.getEnabledCategories());
例#
インスペクタによるトレースイベントデータの収集#
'use strict';
const { Session } = require('inspector');
const session = new Session();
session.connect();
function post(message, data) {
return new Promise((resolve, reject) => {
session.post(message, data, (err, result) => {
if (err)
reject(new Error(JSON.stringify(err)));
else
resolve(result);
});
});
}
async function collect() {
const data = [];
session.on('NodeTracing.dataCollected', (chunk) => data.push(chunk));
session.on('NodeTracing.tracingComplete', () => {
// done
});
const traceConfig = { includedCategories: ['v8'] };
await post('NodeTracing.start', { traceConfig });
// do something
setTimeout(() => {
post('NodeTracing.stop').then(() => {
session.disconnect();
console.log(data);
});
}, 1000);
}
collect();