Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Goのパフォーマンス計測 / go performance measurement

66487f93d23ed4f64752cffbafdb938a?s=47 convto
February 20, 2019

Goのパフォーマンス計測 / go performance measurement

go 標準のツールチェインでプロファイル取るときのメモ

66487f93d23ed4f64752cffbafdb938a?s=128

convto

February 20, 2019
Tweet

More Decks by convto

Other Decks in Technology

Transcript

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

  2. convto jisibari Twitter: @convto Github: convto 2

  3. もくじ - どういう時に必要? - bench mark test - pprof (with

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

    test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ
  5. どういう時に必要? - ボトルネック調査 - コードレビュー - その他

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

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

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

  9. 除霊

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

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

  12. もくじ - どういう時に必要? - bench mark test - pprof (with

    test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ
  13. Bench mark test - testingパッケージでできる - `Benchmark` プレフィックスが対象 - `$

    go test -bench .` で実行できる - オプションがいくつかある
  14. 実行

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

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

  17. もくじ - どういう時に必要? - bench mark test - pprof (with

    test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ
  18. runtime/pprofパッケージ - runtimeパッケージのwrapperみたいなもの - 可視化ツールで想定されている形式で調査結果 を吐き出す - 可視化は `go tool

    pprof` を利用する
  19. “ Package pprof writes runtime profiling data in the format

    expected by the pprof visualization tool. https://golang.org/pkg/runtime/pprof/
  20. pprof (with test) - benchmark の結果をプロファイルとして出力する 機能 - `go test`

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

    コマンドに組み込まれている - `go test -memprofile mem.out -bench .` のように実 行する テストコードをいじるだけでできます ビルドされるコードに影響はでません
  22. 実行

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

  24. もくじ - どういう時に必要? - bench mark test - pprof (with

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

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

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

  28. もくじ - どういう時に必要? - bench mark test - pprof (with

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

  30. こう書く

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

  32. 対応してるエンドポイント - 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/
  33. もくじ - どういう時に必要? - bench mark test - pprof (with

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

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

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

    ケージなので、wrapperがあれば 理由がない限りそっちを使おう
  37. こうやってプロファイルとる

  38. もくじ - どういう時に必要? - bench mark test - pprof (with

    test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ
  39. まとめ - Goは標準でいろいろ覗けるからよい - pprofは色々な方法で使える - runtimeでの計測は基本しなくていい

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

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