寝ても覚めてもこんぴうた

プログラム書いたり、ネットワーク設計したり、サーバ構築したり、車いじったり、ゲームしたり。そんなひとにわたしはなりたい。 投げ銭は kyash_id : chidakiyo マデ

GAE/go1.11 で Stackdriver Profiler を使ってみる

f:id:chidakiyo:20190822202047j:plain

appengine go1.11以降でgoでもプロファイラが使えるようなので初期設定だけやってみます。
内容的にはほぼ こちら の内容です。

Stackdriver Profiler は何ができるの?

Goの場合には、CPU、ヒープ、競合、スレッドに関するプロファイリングが可能です。
その他、競合プロファイリングやスレッドプロファイリング等があるようです。ここはこの記事では説明しません。

GAE/go アプリケーションにプロファイラを組み込む

ドキュメントには アプリケーションにパッケージをインポートしてから、コードのできるだけ早い段階でProfilerを初期化する とあるので、mainロジックの早い段階で以下のように初期化すると良いと思います。

以下の例は ginを利用しています。

import (
    "cloud.google.com/go/profiler"
    "github.com/gin-gonic/gin"
    "google.golang.org/appengine"
    "net/http"
)

func main() {
    if err := profiler.Start(profiler.Config{
        DebugLogging: true,
    }); err != nil {
        // TODO: Handle error.
    }

  route := gin.Default()
  http.Handle("/", route)
  route.GET("/", func(context *gin.Context){
    context.String(http.StatusOK, "hello!")
  })
    appengine.Main()
}

プロファイラのAPIを有効化する

プロファイラを利用するためにはAPIの有効化が必要です。
WebUIから Profiler API を検索し、有効化しても良いですし、
コマンドで gcloud services enable cloudprofiler.googleapis.com と実行しても良いです。

いずれかの方法でAPIを有効化します。

作成したappengineアプリケーションをデプロイする

デプロイ方法は特にこの記事では説明しません。
デプロイ完了の後に、アプリケーションに何度かアクセスし、 hello! とレスポンスが帰ってくることを確認します。

プロファイラを確認する

いよいよメインのプロファイラの確認です。
プロファイラの画面 にアクセスし、確認します。

CPU time

f:id:chidakiyo:20190822201626p:plain

Heap

f:id:chidakiyo:20190822201615p:plain

Allocated heap

f:id:chidakiyo:20190822201604p:plain

Threads

f:id:chidakiyo:20190822201552p:plain

まとめ

まずは使えるようになるという意味ではここまで。
また時間があればプロファイラの使い方の記事でも書こうかと思います。