New Relic の APM では、 Node VMsページはパフォーマンスの問題のトラブルシューティングやアプリケーションの健全性の監視に役立つランタイム データを提供します。
何が必要
Node VMs ページの一部のチャートでは、Node.js エージェントに加えてNew Relic Native メトリックス モジュールをインストールする必要があります。 インストール手順については、 Node.js VM Measurementsを参照してください。
Node.js VM 統計の表示
one.newrelic.com > All capabilities > APM & services > (select an app) > Node VMs: 複数のサーバーが同じアプリケーションにレポートしている場合、ページではサーバーごとにグラフが分類されます。 ページ上部のServersフィルターからサーバーを選択すると、個々のサーバーのデータを表示し、追加の詳細を取得できます。
これらの測定値のスパイクや上昇傾向を特定の取引と関連付ける。
one.newrelic.com > All capabilities > APM & services > (select an app) > Node VMs
に移動します。
チャート内をクリック&ドラッグして期間を選択します。
トランザクションのページ またはその他のページに移動します。
他のページに移動しても、 タイム ピッカーの 選択は変わりません。
パフォーマンス問題の分析
個々のNode VMsチャートで利用可能なデータの概要を次に示します。 すべてのグラフを一緒に使用することで、パフォーマンスの問題をトラブルシューティングできます。 例えば:
アプリケーションがより多くのオブジェクトを使用するようになると、メモリ使用量が増加し、ガベージコレクション(GC)が頻繁に実行されるようになります。GCに費やされる時間によって、CPU使用率が増加します。
異常に長い同期コード実行により、CPU 使用率が増加する可能性があります。 これにより、
Event loop max CPU time per tick
チャートにスパイクが表示されます。
ガベージコレクションに費やされた時間です。単一のサーバーの場合、グラフは1分あたりの平均、最大、および合計時間を示します。複数のサーバーの場合、グラフはサーバーごとにまとめられた合計時間を示します。
一般的に、GCの時間や周波数が急上昇した場合、問題の可能性があります。
1分あたりのGCランの実行回数。単一のサーバーの場合、グラフはGCの種類ごとに分かれています。複数のサーバーの場合、グラフはGCコールの合計数(すべてのタイプを組み合わせたもの)をサーバーごとに分類しています。
このグラフは、1分あたりのガベージコレクションにかかった時間の合計を、GCタイプ別に表示したものです。単一のサーバーを表示している場合のみ表示されます。Node.jsのバージョンやアプリのアクティビティに応じて、以下の種類が表示されることがあります。
Value | Description |
---|
Scavenge
| 最も一般的なガベージコレクションの方法です。Node.jsは通常、VMがアイドル状態になるたびに、これらのうちの1つを起動します。 |
MarkSweepCompact
| V8が行うガベージコレクションの中で最も重いタイプです。このような現象が多く見られる場合は、プロセス内のオブジェクトの数を減らすか、V8のヒープ制限を増やす必要があります。 |
IncrementalMarking
| 段階的なガベージコレクションで、コレクションとアプリケーションロジックを連動させ、アプリケーションの一時停止時間を短縮します。Node.js v6以上でのみ使用可能。 |
ProcessWeakCallbacks
| ガベージコレクションが行われた後、V8は、解放されたオブジェクトのために登録された弱参照コールバックを呼び出します。この測定は、あるガベージコレクションにおいて、最初の弱いコールバックの開始から最後のコールバックの終了までです。Node.js v6以上でのみ使用可能です。 |
このグラフは、Node.jsのプロセスが消費するメモリ量を示しています。複数のサーバーの場合、チャートはサーバーごとにグループ化された合計メモリを示します。単一のサーバの場合、チャートは以下の種類のメモリで区分されています。
Value | Description |
---|
非ヒープ | V8のヒープ外のデータに割り当てられたメモリ(バッファやソケットなど)。 |
V8ヒープ(使用済み) | V8が使用しているメモリの量(JavaScriptのオブジェクトなど)。 |
V8ヒープ(フリー) | V8がメモリプーリングのために確保しているメモリ量です。このメモリは積極的に使用されていませんが、V8が必要に応じて自由に割り当てられるように確保されています。 |
このグラフは、Node.js プロセスの CPU 使用率を示しています。
複数のサーバーの場合、チャートは合計のCPU使用率をサーバーごとにまとめて表示します。単一のサーバーの場合、チャートは以下のように区分されます。
Value | Description |
---|
ユーザー | ユーザーコードを実行するのにかかった時間を、壁時計の時間で割ったもの。 |
システム | Node.js プロセスに代わってシステム カーネルで費やされた時間を実時間で割った値。 |
このグラフは、1分間のイベントループのティック数を表しています。1ティックとは、イベントループの1回転のことで、実行可能な状態になった関数が実行されます。
各イベント ループ ターンの一部として、Node.js は保留中の I/O が完了するのを待ちます。I/O イベントが受信されると、イベント ループはそれに関連付けられたコールバックを実行します。したがって、1 分あたりのティック数は、I/O イベントが発生する頻度に対応します。
このグラフは、1分あたりの1回のチックに費やされる最大時間を示します。これは、長時間の同期コード実行を示す、異常に長いイベントループの目盛りを検出するのに役立ちます。
複数のプロセスのクラスターを表示
同じサーバー上の複数の Node.js プロセスが同じ New Relic アプリケーションにレポートする場合、これらのチャートには集約されたデータが表示されます。これは、クラスター内の各ワーカープロセスが個別のNode.jsランタイムを持ち、個別のデータを収集するためです。
Clusters | Comments |
---|
全労働者の合計 | 以下のグラフは、全労働者の合計を示したものです。 - GC一時停止時間-1分間のトータルタイム
- GCポーズの頻度
- タイプ別のGC休止時間
- CPU使用率
- イベントループの1分あたりのティック数
|
全労働者の平均 | 以下のグラフは、全労働者の平均値を示しています。 |
全従業員の最大値 | 以下のグラフは、全労働者の最大値を示しています。 - GCポーズタイム - 最大
- イベントループ - 1回のチックでの最大CPU時間
|