Slide 1

Slide 1 text

Goのパフォーマンス計測 2019/02/20(水) Makuake LT Party #9

Slide 2

Slide 2 text

convto jisibari Twitter: @convto Github: convto 2

Slide 3

Slide 3 text

もくじ - どういう時に必要? - bench mark test - pprof (with test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ

Slide 4

Slide 4 text

もくじ - どういう時に必要? - bench mark test - pprof (with test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ

Slide 5

Slide 5 text

どういう時に必要? - ボトルネック調査 - コードレビュー - その他

Slide 6

Slide 6 text

どうせツールの導入が大変でしょ...?

Slide 7

Slide 7 text

標準のツールチェイン&パッケージでできます - testing - runtime/pprof - runtime

Slide 8

Slide 8 text

標準のツールチェイン&パッケージでできます - testing - runtime/pprof - runtime Thank you

Slide 9

Slide 9 text

除霊

Slide 10

Slide 10 text

どういう時に必要? - ボトルネック調査 - コードレビュー - その他

Slide 11

Slide 11 text

どういう時に必要? - ボトルネック調査 - コードレビュー - その他 気軽に試せるのでぜひ

Slide 12

Slide 12 text

もくじ - どういう時に必要? - bench mark test - pprof (with test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ

Slide 13

Slide 13 text

Bench mark test - testingパッケージでできる - `Benchmark` プレフィックスが対象 - `$ go test -bench .` で実行できる - オプションがいくつかある

Slide 14

Slide 14 text

Slide 15

Slide 15 text

実行

Slide 16

Slide 16 text

実行 実行回数 1回あたり実行時間

Slide 17

Slide 17 text

実行 実行回数 1回あたり実行時間 1回あたり使用メモリ 1回あたりメモリ割り 当て回数

Slide 18

Slide 18 text

もくじ - どういう時に必要? - bench mark test - pprof (with test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ

Slide 19

Slide 19 text

runtime/pprofパッケージ - runtimeパッケージのwrapperみたいなもの - 可視化ツールで想定されている形式で調査結果 を吐き出す - 可視化は `go tool pprof` を利用する

Slide 20

Slide 20 text

“ Package pprof writes runtime profiling data in the format expected by the pprof visualization tool. https://golang.org/pkg/runtime/pprof/

Slide 21

Slide 21 text

pprof (with test) - benchmark の結果をプロファイルとして出力する 機能 - `go test` コマンドに組み込まれている - `go test -memprofile mem.out -bench .` のように実 行する

Slide 22

Slide 22 text

pprof (with test) - benchmark の結果をプロファイルとして出力する 機能 - `go test` コマンドに組み込まれている - `go test -memprofile mem.out -bench .` のように実 行する テストコードをいじるだけでできます ビルドされるコードに影響はでません

Slide 23

Slide 23 text

実行

Slide 24

Slide 24 text

[demo] 吐かれたプロファイルを go tool で 分析してみる

Slide 25

Slide 25 text

もくじ - どういう時に必要? - bench mark test - pprof (with test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ

Slide 26

Slide 26 text

pprof (埋め込み) - スタンドアロンなプログラムで使う - バイナリに埋め込むので配布先でもプロファイル が吐ける

Slide 27

Slide 27 text

ドキュメントで紹介されている例

Slide 28

Slide 28 text

ドキュメントで紹介されている例 main関数にこれを埋めるとプロファイル吐け るようになる

Slide 29

Slide 29 text

もくじ - どういう時に必要? - bench mark test - pprof (with test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ

Slide 30

Slide 30 text

pprof (with http) - net/httpのサブパッケージ(net/http/pprof)を使う - HTTP経由でプロファイルを取得できる - testも書いてないし、バイナリに埋め込むのは面 倒、とかでサクッと試す時におすすめ

Slide 31

Slide 31 text

こう書く

Slide 32

Slide 32 text

こうやってプロファイルとる

Slide 33

Slide 33 text

対応してるエンドポイント - http://localhost:6060/debug/pprof/profile - http://localhost:6060/debug/pprof/heap - http://localhost:6060/debug/pprof/block - http://localhost:6060/debug/pprof/mutex - より詳しくはこちら https://golang.org/pkg/net/http/pprof/

Slide 34

Slide 34 text

もくじ - どういう時に必要? - bench mark test - pprof (with test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ

Slide 35

Slide 35 text

runtimeパッケージでもパフォーマンス観測はできる - たとえば https://golang.org/pkg/runtime/#MemProfile を 使ったりする - が、ドキュメントでも「ほとんどの場合はpprof使っ た方がいいよ」とちょいちょい出てくる

Slide 36

Slide 36 text

runtimeパッケージのメリット - https://golang.org/pkg/runtime/#ReadMemStats を使うとstack 領域のメモリ使用量がわかる - pprofはstackは基本的に読めない、heapのみ - その他、比較的低レイヤーな処理を生で触れる

Slide 37

Slide 37 text

runtimeパッケージのメリット - https://golang.org/pkg/runtime/#ReadMemStats を使うとstack 領域のメモリ使用量がわかる - pprofはstackは基本的に読めない、heapのみ - その他、比較的低レイヤーな処理を生で触れる ランタイムレベルの操作をサポートするパッ ケージなので、wrapperがあれば 理由がない限りそっちを使おう

Slide 38

Slide 38 text

こうやってプロファイルとる

Slide 39

Slide 39 text

もくじ - どういう時に必要? - bench mark test - pprof (with test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ

Slide 40

Slide 40 text

まとめ - Goは標準でいろいろ覗けるからよい - pprofは色々な方法で使える - runtimeでの計測は基本しなくていい

Slide 41

Slide 41 text

- プレゼンテーションテーマは SlidesCarnival の ヨークプレゼンテーションテンプレー ト を利用しています クレジット表記

Slide 42

Slide 42 text

ご静聴ありがとう ございました