Node VM (NVM)

APMインサイト Node.jsエージェントはNode.js Chrome V8から重要なメトリックデータを収集します。これらメトリックにより、Node.js VMのふるまいを分析し、アプリケーションパフォーマンスの向上に繋げられます。さらに、エージェントはCPUメトリックを収集し、そのガベージコレクション(GC)メトリックを使用して分析を行えます。

ネイティブモジュールと必要条件

Node.jsでは、追加のネイティブモジュールを使用して、ガベージコレクションとイベントループデータに関連するNode.js VMメトリックの時間ごとのデータを収集します。メモリとCPU使用率はネイティブモジュールの有無に関わらず収集されます。

  • Node.jsエージェント(バージョン3.0.0以上)のインストールで、ネイティブモジュールも自動的にインストールされます。
  • インストール時、ネイティブモジュールは最初に対象マシンのソースを基に構築を行おうとします。このビルドに失敗すると、Node.jsがスタックトレースをコンソールにプリントします。これは無視できます。
  • ネイティブモジュールのビルドに成功すると、ガベージコレクション、メモリ使用量、イベントループデータ、CPU使用率といったメトリックを表示できます。ビルドに失敗すると、メモリとCPU関連のメトリックのみ表示します。

Node.jsネイティブモジュールインストールの必要条件:

node-gypパッケージの手順を参照して、デプロイプラットフォームにネイティブモジュールをコンパイルします。

プラットフォーム 推奨Pythonバージョン 環境
Unix/Linux v3.7、v3.8、v3.9、v3.10 Make, C/C++コンパイラ(GCCなど)
macOS v3.7、v3.8、v3.9、v3.10 Xcodeコマンドラインツール
Windows v3.7、v3.8、v3.9、v3.10 ビジュアルC++ビルド環境
ビルド生成に失敗する基本的な3つの条件は次のとおりです。これにより、GCおよびイベントループメトリックは取得されません。
  1. Python
  2. コンパイラ
  3. NPX - NPM 5.2.0以上、NPXが事前にバンドルされている
    これより下のバージョンはNPXを分けてインストールする必要があります。

NVMメトリックの表示

ランタイムデータを取得して、NVMメトリックでアプリケーションの正常性を監視と、パフォーマンス問題のトラブルシュートを行います。

NVMメトリックの表示方法:

  1. Site24x7にログインします。
  2. APM > Node.jsアプリケーションに移動し、Node VMタブをクリックします。
  3. 表示したいメトリックの期間を選択します。
View NodeVM metrics

グラフやメトリックが表示され、パフォーマンス問題のトラブルシュートに役立てられます。

例:

  • アプリケーションが多くのオブジェクトやGCが頻繁に実行している際、メモリ使用量が増加します。GCの時間消費状況により、CPU使用率が増加します。
  • 過剰な同期コード実行によりCPU使用率が上昇します。これにより、グラフTickごとの最大CPU時間にスパイクが表示されます。

グラフを使用したパフォーマンス参照

画面右上で、メトリックの表示したい期間を選択します。

Performance inference using NodeVM graphs

GC停止時間
GCでかかった時間です。基本的に、GC時間のスパイクが発生した場合はなにかしらの問題があります。

GC停止頻度
1分ごとに操作されたGCの実行数です。

メモリ使用量
Node.jsプロセスで消費されたメモリ量です。

パラメーター 説明
非ヒープ (MB) V8のヒープ外のデータ用に予約されたメモリです(例:バッファーやソケット)。
空き (MB) メモリプール用にV8によって確保されるメモリの量です。このメモリは通常は使用されませんが、V8が必要に応じて自由に割り当てるために予約されています。
使用済み (MB) V8が使用したメモリ量です(例:JavaScriptオブジェクト)。

Performance inference using NodeVM graphs

CPU使用率
Node.jsプロセスのCPU使用率を表示します。

パラメーター 説明
ユーザー (%) ユーザーコードの実行時間を実際の時間と割った値です。
システム (%) Node.jsプロセスに代わってシステムカーネルで使用された時間を実時間で割った値。

1分毎のイベントループTick
1分毎のイベントループTick数を表示します。Tickは、実行準備ができている関数が実行される1つのイベントループターンです。

Node.jsは、I/Oが停止して各イベントループターンが完了するまで待機します。I/Oイベントが受信されると、イベントループが関連付いたコールバックを実行します。そのため、1分毎のTick数はI/Oイベントが発生した頻度に該当します。

Tickごとの最大CPU時間
1つのTickに要した最大時間です。これにより、異常な長期のイベントループTickを特定し、同期コード実行の拡張に繋げられます。

トップ