アプリのパフォーマンスを測定する

このドキュメントでは、Cloud Profiler を設定して使用する方法について説明します。サンプルの Go プログラムをダウンロードし、プロファイリングを有効にしてサンプル プログラムを実行してから、収集されたデータを Profiler インターフェースで調査します。

準備

  1. 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.
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  4. Google Cloud コンソールのナビゲーション パネルで [API とサービス] を選択し、[API とサービスの有効化] をクリックして、Cloud Profiler API を有効にします。

    [Profiler API] 設定に移動

  5. [API が有効です] が表示されている場合、API はすでに有効になっています。そうでない場合は、[有効にする] ボタンをクリックします。

  6. Cloud Shell を開くには、Google Cloud コンソールのツールバーで「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにします。

    しばらくすると、Google Cloud コンソール内で Cloud Shell セッションが開きます。

    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 に最初のプロファイル データが表示されます。このインターフェースには、プロファイリング データの調査に使用する一連のコントロールとフレームグラフが表示されます。

サンプルコードと Profiler のインターフェース。

時間コントロールに加え、使用するプロファイル データのセットを選択できるオプションもあります。複数のアプリケーションをプロファイリングする場合、サービスを使用して、プロファイリングされるデータの送信元を選択します。[プロファイルの種類] では、表示するプロファイル データのタイプを選択します。[ゾーン名] と [バージョン] では、Compute Engine ゾーンまたはアプリケーションのバージョンを選択し、画面に表示するデータを制限します。[重み] を使用すると、リソース消費のピーク時にキャプチャされたプロファイルを選択できます。

フレームグラフに表示する分析対象のプロファイルを絞り込むには、フィルタを追加します。上のスクリーンショットでは、フィルタバー に 1 つのフィルタが表示されています。このフィルタ オプションは Metric で、フィルタ値は CPU time です。

データを調べる

フレームグラフには、プログラムのコールスタックが表示されます。フレームグラフでは、各関数がフレームで表示されます。フレームの幅は、その関数によるリソース消費の割合を表します。一番上のフレームはプログラム全体を表します。このフレームのリソース消費量は常に 100% になります。このフレームには、このグラフの平均化に使用されているプロファイルの数も表示されます。

サンプル プログラムには、複雑な呼び出しスタックはありません。上のスクリーンショットには 5 つのフレームが表示されています。

  • 灰色の枠は実行可能ファイル全体を表し、100% のリソースを消費しています。
  • 緑色の main フレームは Go runtime.main です。
  • オレンジ色の main フレームは、サンプル プログラムの main ルーチンです。
  • オレンジ色の busyloop フレームは、サンプルの main から呼び出されるルーチンです。
  • オレンジ色の main.load フレームは、サンプルの main から呼び出されるルーチンです。

フィルタ セレクターを使用すると、名前に一致する関数を除外できます。たとえば、ユーティリティ関数の標準ライブラリをグラフから削除できます。また、特定のメソッドから発生したコールスタックを除外することも、別の方法でグラフを単純化することもできます。main.go アプリケーションは単純なので、あまりフィルタリングする必要はありません。

単純なアプリケーションの場合でも、フィルタを使用して不要なフレームを非表示にすると、目的のフレームが見やすくなります。たとえば、サンプルコードのプロファイリング画面では、灰色のフレームがその下の最初の main フレームよりもわずかに大きくなっています。これは、main コールスタックがリソースのほとんどを消費していることを表しています。では、ほかにリソースを消費しているものはないのでしょうか。アプリケーションの main ルーチンの外部で発生している消費量を確認するには、main ルーチンのコールスタックを非表示にするフィルタを追加します。ここでは、main の外部で発生しているリソース消費は 0.227% になっています。

サンプル プログラムのスタックを表示しない。

フィルタリングやプロファイリング データの探索方法の詳細については、分析するプロファイルを選択するをご覧ください。

次のステップ

プロファイリングに関する一般的な情報については、次のドキュメントをご覧ください。

Cloud Profiler エージェントの実行については、以下をご覧ください。