Node.js VM 統計ページ

New Relic APM の Node VMs ページは、パフォーマンスの問題のトラブルシューティングとアプリケーションの健全性の監視に役立つランタイムのデータが表示されます。このページにアクセスするには、rpm.newrelic.com/apm にアクセスし、アプリを選択し、Monitoring > Node VMs を選択します。

この機能の利用可否は、契約しているサブスクリプションレベルによって異なります。
New Relic APM - Node VMs page 1.png
rpm.newrelic.com/apm > (選択したアプリ) > Monitoring > Node VMs: 複数のサーバーが同じアプリにレポートする場合、ページはサーバーごとにグラフを分割できます。個々のサーバーのデータを表示したり、ページの上部にある Servers フィルターからサーバーを選択して、詳細を表示できます。

要件と互換性

Node VMs ページのチャートの中には、表示するには Node.js エージェントに加えてNew Relic ネイティブメトリクスモジュールをインストールする必要があります。インストール手順については、Node VM 計測をご覧ください。

Node VM の統計情報

パフォーマンスに関する問題のトラブルシューティングには、すべてのチャートを一緒に使用すべきです。たとえば、アプリが多くのオブジェクトを使用し始めると、メモリー使用量が増加し、ガベージ・コレクション(GC)がより頻繁に実行され、そして、GC の処理時間により、さらに CPU 使用率が増加します。もう1つの例は、異常に長い同期コードの実行です。これは、CPU 使用率を増加させ、tick ごとのイベントループの最大 CPU 時間チャートに表示します。

これらの測定値のスパイクや上昇傾向と特定のトランザクションの相関関係を確認できます。まず、このチャートの任意の場所をクリック&ドラッグして時間帯を選択します。すると、ページの上部にあるタイムピッカーの時間が、選択した時間帯に更新されます。次に、Transactions ページ(や関心のある他のページ)に移動します。タイムピッカーが選択している時間帯は以前として同じままです。
GC 休止時間
ガベージコレクションに費やされた時間。単一のサーバーの場合、グラフには1分あたりの平均時間、最大時間、合計時間が表示されます。複数のサーバーある場合、グラフにはサーバーごとにグループ化された合計時間が表示されます。
通常、GC 時間や頻度の急上昇は問題が潜んでいる可能性を示唆しています。
GC 休止頻度
GC が1分間に実行されました回数です。単一のサーバーの場合、チャートには GC タイプ別に表示されます。複数のサーバーある場合、グラフはサーバーごとにグループ化された GC 呼び出しの合計数(全種類を組み合わせたもの)を表示します。
種類ごとの GC 休止時間

このチャートは、1分あたりのガベージコレクションに費やされた合計時間を GC タイプ別に表示します。単一サーバーの場合にのみ表示されます。Node.js のバージョンとアプリのアクティビティによって、以下の項目も表示される場合があります。

説明
Scavenge 最も一般的なガベージコレクションのアルゴリズムです。Node は通常、VM がアイドル状態になるたびに、ここで紹介するアルゴリズムのどれかをトリガーします。
MarkSweepCompact V8 の中でも最も重いタイプのガベージコレクションです。この実行頻度が多い場合は、プロセス中のオブジェクトの数を減らしたり、V8 のヒープの上限を増やしたりほうがよいでしょう。
IncrementalMarking アプリの一時停止を短縮するために、アプリケーションロジック中にガーベッジコレクションを挟み込み、段階的に実施するガベージコレクションです。Node.js v6 以降のみ。
ProcessWeakCallbacks ガベージコレクションが発生すると、V8 は解放されたオブジェクトに対して登録済みの弱参照のコールバックを呼び出します。最初の弱いコールバックの開始から、指定されたガベージコレクションの最後まで計測します。Node.js v6 以降のみ。
メモリ使用量

このグラフは、Node.js プロセスのメモリ使用量を示しています。複数サーバーを利用している場合、グラフにはサーバーごとにグループ化された合計メモリー量が表示されます。単一サーバーの場合は、以下のタイプのメモリーで分類表示されます。

説明
Non-heap V8 のヒープ外のデータに割り当てられたメモリー(バッファー、ソケットなど)。
V8 heap (used) V8 のメモリ使用量(JavaScript オブジェクトなど)。
V8 heap (free) メモリプール用に V8 が確保しているメモリ。このメモリは積極的に使用されていませんが、必要に応じて自由に割り当てるために V8が用意しているものです。
CPU 使用量
このグラフは、Node プロセスの CPU 使用率を表示しています。

複数サーバー利用している場合、グラフはサーバーごとにグループ化された合計CPU使用率を示します。単一サーバーの場合は、以下のように分類表示されます。

説明
User ユーザーコードの実行の消費時間をウォールクロックタイム(実時間)で割った値。
System Node プロセスに代わってシステムカーネルでの消費時間をウォールクロックタイム(実時間)で割った値。
イベントループ — 1分あたりの tick 数
このグラフは1分あたりのイベントループの tick 数を表示します。tick は、イベントループの1回転のことです。実行する準備ができている function が実行されます。

各イベントループの一部として、Node は保留中の I/O が完了するのを待ちます。I/O イベントを受信するとイベントループはそれに関連付いているコールバックを実行します。よって、1分あたりの tick 数は、I/O イベントが発生する頻度に対応します。

イベントループ — tick あたりの最大 CPU 時間
このグラフは、1分あたり 1 tick が使用する最大時間を表示しています。長い同期コード実行している異常に長いイベントループ tick の検出に便利です。
New Relic APM - Node VMs page 2.png
rpm.newrelic.com/apm > (選択したアプリ) > Monitoring > Node VMs: Node.js アプリが単一のサーバー上でホストされている場合、VM ページには各チャートに詳細なパフォーマンスの統計情報が表示されます。複数サーバー利用している場合は、ページの上部にある Servers フィルターからサーバーを選択して、個々のサーバーのデータを表示できます。

複数プロセスのクラスタリング

同じサーバー上の複数のNode.jsプロセスが同じNew Relicアプリケーションに報告すると、これらのグラフには集計されたデータが表示されます。これは、クラスタ内の各ワーカー・プロセスが独自のNode.jsランタイムを持ち、別々のデータを収集するためです。

以下のチャートは、全ワーカーの合計の情報を示しています。

  • GC 休止時間 — 分あたりの合計時間
  • GC 休止頻度
  • タイプ別の GC 休止時間
  • CPU 使用率
  • 分あたりのイベントループの tick 数

以下のチャートは、全ワーカーの平均の情報を示しています。

  • メモリー使用量
  • GC 休止時間 — 平均

以下のチャートは、全ワーカーの最大の情報を示しています。

  • GC 休止時間 — 最大
  • イベントループ — tick あたりの最大 CPU 時間

関連情報

関連情報は以下のとおりです。