go-swaggerを速くした話
go-swaggerのgenerate server
を速くした話をします.
上の2つの記事であげたPRでgo-swaggerのコード生成を速くしました.
上の2つの記事ではどこが遅いか明らかになった状態からのことを書きましたが, この記事ではどうやって明らかにしたかを書きます.
と言っても非常に簡単でpprofを使っただけです.
今回はpprofを直接使ったわけではなく,
という非常に簡単に使えるライブラリ経由で使用しました. 本当にCLIなどの計測の際はこれで十分な気がします.
defer profile.Start().Stop()
上のようなコードをgo-swaggerのmain関数に追加してbuild, 実行しました. go tool pprof -svg [出力されたファイル]
とすると以下のような画像が出力されます.
このグラフを見ると全体像から重い場所がわかると思います. こういった形で簡単に計測, 改善場所の発見ができるはずです.
この過程で, Analyzedが重いことと無駄にregexp.MustCompileを呼んでいることが発見できました.
また, これとは違う見方でFlameGraphというものがあります. これもpprofのファイルから作れる
というものがあるので分析するときの助けになると思います.
これはCLIを簡単に計測するときは github.com/pkg/profile
でいいと思いますが,
サーバーアプリケーションやデーモンの場合はユーザがみたいタイミングで外部からpprofできるので net/http/pprof
を使ったほうが良いです.
しかし問題は得てして観測していないときに起こったりするので定期的にpprofを取りたいというときは
という選択肢もありかも知れません.
いずれにせよ本番環境で有効にする場合はインターネットからつながらないように気をつけてください.