LoginSignup
0
0

More than 3 years have passed since last update.

pprofのweb viewでパフォーマンス測定

Last updated at Posted at 2019-11-08

概要

pprofでサーバーのパフォーマンス検証する時、
web viewで簡単にボトルネックを特定できます。

pprofとは

go toolに入っているプロファイラーツール
関数単位でボトルネックになっている処理を特定できます
https://golang.org/pkg/net/http/pprof/
UI上で処理の流れがこんな感じに見れます

pprof.png

使用ツール

  1. Go
go version
go version go1.13 darwin/amd64
  1. graphviz

dotファイルとかをいい感じに可視化してくれるツール
今回は吐き出されたプロファイルを見やすくしてくれる

brew install graphviz
  1. コードに変更を入れる
main.go
import (
        "context"
       "log"
        "net/http"
        "os"
        "os/signal"
        "syscall"
        "time"

      _ "net/http/pprof" // これをインポートすることでプロファイル取得用のルーティングがインジェクションされる
 func main() {
// 別スレッドで計測
      go func() {
              l.Println(http.ListenAndServe(":6060", nil))
      }()

dockerを使っている時はportを開けるのを忘れないように

docker-compose.yml
       - ./secret:/secret
     ports:
       - "3001:3001"
+      - "6060:6060" #dockerのネットワークとホストをつなぐ
     environment:
       - ENV=develop
       - DB_HOST=tcp(db:3306)

あとはgo.modなど

実行

計測したいリクエストを投げる

計測

go tool pprof -http=: localhost:6060

↑は処理時間のプロファイリング
他にもCPU, goroutineのプロファイルなどが可能

go tool pprof -http=: localhost:6060 http://localhost:6060/debug/pprof/profile?seconds=30

referenceに他の計測指標も載っています。

まとめ

こんな感じでprofileが簡単な修正でできます。
特に大規模サービスになった時ボトルネックの特定に役立ちそうです。
n番煎じかとは思いますが、なぜかハマってしまったのでまとめておきました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0