アプリのパフォーマンスを測定する
このドキュメントでは、Cloud Profiler を設定して使用する方法について説明します。サンプルの Go プログラムをダウンロードし、プロファイリングを有効にしてサンプル プログラムを実行してから、収集されたデータを Profiler インターフェースで調査します。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the required API.
- Cloud Shell を開くには、Google Cloud コンソールのツールバーで「Cloud Shell をアクティブにする」をクリックします。
しばらくすると、Google Cloud Console 内で Cloud Shell セッションが開きます。
プロファイリングするプログラムを取得する
サンプル プログラム main.go
は、GitHub の golang-samples
リポジトリにあります。ここで Go サンプルのパッケージを取得します。
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
パッケージの取得が完了するまでに少し時間がかかります。
コードをプロファイリングする
取得したパッケージ内の Profiler サンプルコードのディレクトリに移動します。
cd golang-samples/profiler/profiler_quickstart
main.go
プログラムは、CPU 使用率の高いワークロードを作成し、プロファイラにデータを提供します。プログラムを起動し、実行したままにします。
go run main.go
このプログラムは、実行時に CPU をロードするように設計され、また、実行中のプログラムからプロファイリング データを収集し、定期的に保存する Profiler を使用するように構成されています。
プログラムを起動してからしばらくすると、profiler has started
というメッセージが表示されます。約 1 分後には、さらに次の 2 つのメッセージが表示されます。
successfully created profile CPU
start uploading profile
これらのメッセージは、プロファイルが作成され、Cloud Storage プロジェクトにアップロードされたことを示しています。プログラムは、実行されている限り、1 分間に約 1 回、最後の 2 つのメッセージを出力します。
サービスの開始後にアクセス拒否エラー メッセージが表示された場合は、Google Cloud プロジェクト構成のエラーをご覧ください。
Profiler のインターフェース
アプリケーションを起動してからしばらくすると、Profiler に最初のプロファイル データが表示されます。このインターフェースには、プロファイリング データの調査に使用する一連のコントロールとフレームグラフが表示されます。
時間コントロールに加え、使用するプロファイル データのセットを選択できるオプションもあります。複数のアプリケーションをプロファイリングする場合、サービスを使用して、プロファイリングされるデータの送信元を選択します。[プロファイルの種類] では、表示するプロファイル データのタイプを選択します。[ゾーン名] と [バージョン] では、Compute Engine ゾーンまたはアプリケーションのバージョンを選択し、画面に表示するデータを制限します。[重み] を使用すると、リソース消費のピーク時にキャプチャされたプロファイルを選択できます。
フレームグラフに表示する分析対象のプロファイルを絞り込むには、フィルタを追加します。上のスクリーンショットでは、フィルタバー filter_list に 1 つのフィルタが表示されています。このフィルタ オプションは Metric
で、フィルタ値は CPU time
です。
データを調べる
フレームグラフには、プログラムのコールスタックが表示されます。フレームグラフでは、各関数がフレームで表示されます。フレームの幅は、その関数によるリソース消費の割合を表します。一番上のフレームはプログラム全体を表します。このフレームのリソース消費量は常に 100% になります。このフレームには、このグラフの平均化に使用されているプロファイルの数も表示されます。
サンプル プログラムには、複雑な呼び出しスタックはありません。上のスクリーンショットには 5 つのフレームが表示されています。
- 灰色の枠は実行可能ファイル全体を表し、100% のリソースを消費しています。
- 緑色の
main
フレームは Goruntime.main
です。 - オレンジ色の
main
フレームは、サンプル プログラムのmain
ルーチンです。 - オレンジ色の
busyloop
フレームは、サンプルのmain
から呼び出されるルーチンです。 - オレンジ色の
main.load
フレームは、サンプルのmain
から呼び出されるルーチンです。
フィルタ セレクターを使用すると、名前に一致する関数を除外できます。たとえば、ユーティリティ関数の標準ライブラリをグラフから削除できます。また、特定のメソッドから発生したコールスタックを除外することも、別の方法でグラフを単純化することもできます。main.go
アプリケーションは単純なので、あまりフィルタリングする必要はありません。
単純なアプリケーションの場合でも、フィルタを使用して不要なフレームを非表示にすると、目的のフレームが見やすくなります。たとえば、サンプルコードのプロファイリング画面では、灰色のフレームがその下の最初の main
フレームよりもわずかに大きくなっています。なぜでしょうか。main
コールスタックがリソースのほとんどを消費していることを表しています。では、ほかにリソースを消費しているものはないのでしょうか。アプリケーションの main
ルーチンの外部で発生している消費量を確認するには、main
ルーチンのコールスタックを非表示にするフィルタを追加します。ここでは、main
の外部で発生しているリソース消費は 0.227% になっています。
フィルタリングやプロファイリング データの探索方法の詳細については、分析するプロファイルを選択するをご覧ください。
次のステップ
プロファイリングに関する一般的な情報については、次のドキュメントをご覧ください。
- Cloud Profiler の概要
- プロファイリングのコンセプト
- DevOps に関するリソースをお読みください。また、DORA 研究プログラムをご確認ください。
- Go アプリケーションのプロファイリング
- Java アプリケーションのプロファイリング
- Node.js アプリケーションのプロファイリング
- Python アプリケーションのプロファイリング
- Google Cloud の外部で実行されているアプリケーションのプロファイリング