Linux Perf の使用

Linux Perf は、JavaScript、ネイティブ、OS レベルのフレームで低レベルの CPU プロファイリングを提供します。

重要: このチュートリアルは Linux でのみ利用可能です。

方法

Linux Perf は通常 linux-tools-common パッケージを通じて利用可能です。--perf-basic-prof または --perf-basic-prof-only-functions のいずれかを使用することで、perf_events をサポートする Node.js アプリケーションを起動できます。

--perf-basic-prof は常にファイル (/tmp/perf-PID.map) に書き込みを行うため、ディスク容量が無限に増加する可能性があります。これが懸念される場合は、モジュール: linux-perf または --perf-basic-prof-only-functions を使用してください。

両者の主な違いは、--perf-basic-prof-only-functions の方が出力が少ないことです。これは本番環境でのプロファイリングにおいて有効な選択肢です。

# Launch the application an get the PID
$ node --perf-basic-prof-only-functions index.js &
[1] 3870

次に、希望する頻度に基づいてイベントを記録します

$ sudo perf record -F 99 -p 3870 -g

この段階では、信頼性の高い分析のためにより多くのレコードを生成するために、アプリケーションに負荷テストを使用すると良いでしょう。ジョブが完了したら、コマンドに SIGINT (Ctrl-C) を送信して perf プロセスを閉じます。

perf/tmp フォルダ内にファイルを生成します。通常は /tmp/perf-PID.map (上記の例では /tmp/perf-3870.map) という名前で、呼び出された各関数のトレースが含まれています。

これらの結果を特定のファイルに集約するには、次を実行します

$ sudo perf script > perfs.out

生の出力は少し理解しにくいことがあるため、通常は生のファイルを使用してフレームグラフを生成し、より良い可視化を図ります。

Example nodejs flamegraph

この結果からフレームグラフを生成するには、ステップ 6 からこのチュートリアルに従ってください。

perf の出力は Node.js 固有のツールではないため、Node.js で JavaScript コードがどのように最適化されるかについて問題が発生する可能性があります。詳細については、perf の出力に関する問題を参照してください。

読了時間
2分
コントリビュート
このページを編集
目次
  1. 方法
  2. 役立つリンク