Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Goのパフォーマンス計測 / go performance measurement
convto
February 20, 2019
Technology
0
210
Goのパフォーマンス計測 / go performance measurement
go 標準のツールチェインでプロファイル取るときのメモ
convto
February 20, 2019
Tweet
Share
More Decks by convto
See All by convto
byte列のbit表現を得るencodingライブラリ作った
convto
1
590
Go runtimeの歩き方/how to follow go runtime function
convto
1
500
入出金ドメインの苦労話と解決へのアプローチ/funds in/out difficulties and solutions
convto
1
940
rsa_understanding_memo
convto
0
340
検索エンジンことはじめ/First step towards full-text search engine
convto
0
66
自作コンパイラやっていきの巻💪💪/making my own compiler!
convto
0
66
kubernetes 浅瀬 dive / kubernetes shallow dive
convto
0
440
GoogleCloudFunctionsでHTTPフックなGoスクリプトを書く / Write HTTP hook Go script with GoogleCloudFunctions
convto
0
55
Athenaのパーテション設定をCloudWatch Events + Lambda で自動化する
convto
0
73
Other Decks in Technology
See All in Technology
CEXやDEXに依存しないブロックチェーン取引について考える
sbtechnight
0
310
PCL (Point Cloud Library)の基本となぜ点群処理か_2023年_第2版.pdf
cvmlexpertguide
0
120
2年で10→70人へ! スタートアップの 情報セキュリティ課題と施策
miekobayashi
1
190
20230123_FinJAWS
takuyay0ne
0
100
- Rでオブジェクト指向プログラミング- クラス設計入門の入門
kotatyamtema
1
640
OVN-Kubernetes-Introduction-ja-2023-01-27.pdf
orimanabu
1
140
EMになって最初の失敗談 - コミュニケーション編 -
fukuiretu
1
330
re:Inventで発表があったIoT事例の紹介と考察
kizawa2020
0
110
PCI DSS に準拠したシステム開発
yutadayo
0
230
SmartHRからOktaへのSCIM連携で作り出すHRドリブンのアカウント管理
jousysmiler
1
100
Virtual Thread - 導入の背景と、効果的な使い方 -
skrb
3
240
小さなお葬式をAWSに移行したお話
moriryouta
2
150
Featured
See All Featured
The Invisible Side of Design
smashingmag
292
48k
Raft: Consensus for Rubyists
vanstee
130
5.7k
5 minutes of I Can Smell Your CMS
philhawksworth
198
18k
Making Projects Easy
brettharned
102
4.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
24
4.5k
The Art of Programming - Codeland 2020
erikaheidi
35
11k
Support Driven Design
roundedbygravity
88
8.9k
The World Runs on Bad Software
bkeepers
PRO
59
5.7k
Why You Should Never Use an ORM
jnunemaker
PRO
49
7.9k
Scaling GitHub
holman
453
140k
Making the Leap to Tech Lead
cromwellryan
116
7.6k
How to train your dragon (web standard)
notwaldorf
66
4.2k
Transcript
Goのパフォーマンス計測 2019/02/20(水) Makuake LT Party #9
convto jisibari Twitter: @convto Github: convto 2
もくじ - どういう時に必要? - bench mark test - pprof (with
test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ
もくじ - どういう時に必要? - bench mark test - pprof (with
test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ
どういう時に必要? - ボトルネック調査 - コードレビュー - その他
どうせツールの導入が大変でしょ...?
標準のツールチェイン&パッケージでできます - testing - runtime/pprof - runtime
標準のツールチェイン&パッケージでできます - testing - runtime/pprof - runtime Thank you
除霊
どういう時に必要? - ボトルネック調査 - コードレビュー - その他
どういう時に必要? - ボトルネック調査 - コードレビュー - その他 気軽に試せるのでぜひ
もくじ - どういう時に必要? - bench mark test - pprof (with
test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ
Bench mark test - testingパッケージでできる - `Benchmark` プレフィックスが対象 - `$
go test -bench .` で実行できる - オプションがいくつかある
例
実行
実行 実行回数 1回あたり実行時間
実行 実行回数 1回あたり実行時間 1回あたり使用メモリ 1回あたりメモリ割り 当て回数
もくじ - どういう時に必要? - bench mark test - pprof (with
test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ
runtime/pprofパッケージ - runtimeパッケージのwrapperみたいなもの - 可視化ツールで想定されている形式で調査結果 を吐き出す - 可視化は `go tool
pprof` を利用する
“ Package pprof writes runtime profiling data in the format
expected by the pprof visualization tool. https://golang.org/pkg/runtime/pprof/
pprof (with test) - benchmark の結果をプロファイルとして出力する 機能 - `go test`
コマンドに組み込まれている - `go test -memprofile mem.out -bench .` のように実 行する
pprof (with test) - benchmark の結果をプロファイルとして出力する 機能 - `go test`
コマンドに組み込まれている - `go test -memprofile mem.out -bench .` のように実 行する テストコードをいじるだけでできます ビルドされるコードに影響はでません
実行
[demo] 吐かれたプロファイルを go tool で 分析してみる
もくじ - どういう時に必要? - bench mark test - pprof (with
test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ
pprof (埋め込み) - スタンドアロンなプログラムで使う - バイナリに埋め込むので配布先でもプロファイル が吐ける
ドキュメントで紹介されている例
ドキュメントで紹介されている例 main関数にこれを埋めるとプロファイル吐け るようになる
もくじ - どういう時に必要? - bench mark test - pprof (with
test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ
pprof (with http) - net/httpのサブパッケージ(net/http/pprof)を使う - HTTP経由でプロファイルを取得できる - testも書いてないし、バイナリに埋め込むのは面 倒、とかでサクッと試す時におすすめ
こう書く
こうやってプロファイルとる
対応してるエンドポイント - 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/
もくじ - どういう時に必要? - bench mark test - pprof (with
test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ
runtimeパッケージでもパフォーマンス観測はできる - たとえば https://golang.org/pkg/runtime/#MemProfile を 使ったりする - が、ドキュメントでも「ほとんどの場合はpprof使っ た方がいいよ」とちょいちょい出てくる
runtimeパッケージのメリット - https://golang.org/pkg/runtime/#ReadMemStats を使うとstack 領域のメモリ使用量がわかる - pprofはstackは基本的に読めない、heapのみ - その他、比較的低レイヤーな処理を生で触れる
runtimeパッケージのメリット - https://golang.org/pkg/runtime/#ReadMemStats を使うとstack 領域のメモリ使用量がわかる - pprofはstackは基本的に読めない、heapのみ - その他、比較的低レイヤーな処理を生で触れる ランタイムレベルの操作をサポートするパッ
ケージなので、wrapperがあれば 理由がない限りそっちを使おう
こうやってプロファイルとる
もくじ - どういう時に必要? - bench mark test - pprof (with
test) - pprof (埋め込み) - pprof (with http) - runtime - まとめ
まとめ - Goは標準でいろいろ覗けるからよい - pprofは色々な方法で使える - runtimeでの計測は基本しなくていい
- プレゼンテーションテーマは SlidesCarnival の ヨークプレゼンテーションテンプレー ト を利用しています クレジット表記
ご静聴ありがとう ございました