Goのボトルネック調査にgo-torchがめっちゃ良い

こんばんは〜。

ISUCONの練習に励んでいる @_serinuntiusです。

自作のWebアプリケーションのボトルネック調査アプリケーションgraqtを書いていますが、もっと便利(?)なツールがあることを僕は知ってしまいました。

それがgo-torchです。

f:id:serinuntius:20180821212032p:plain

go-torchとは

Tool for stochastically profiling Go programs. Collects stack traces and synthesizes them into a flame graph. Uses Go's built in pprof library.

とのことで、goの組み込みのpprofというツールを使って、スタックトレースをプロファイリングして、炎のグラフ(?)を作成してくれるツールです。

このグラフが慣れると超読みやすくてボトルネックが簡単にわかります!(たぶん)

go-torchの読み方をちゃんと日本語で説明してくれている記事はとても少なく、deeeetさんのGolangでFlame Graphを描く | SOTA という記事ぐらいでしかちゃんと解説されていません。

このグラフを雰囲気で読むと痛い目にあう(すごいxy軸が独特)ので、自分なりにグラフの読み方を書きたいと思います。

go-torchのすごいところ

go-torchの読み解き方

軸の解説をしておきますと、x軸(幅)は出現回数で、y軸はstackされている数です。

要注意なのは、各軸が長いからといって遅いとは限らないということです。

x軸が長い、つまり幅が長いということはその関数が、他の関数に比べて多く呼ばれているということを表しています。

y軸が長い、つまりたくさんの関数がスタックされているところは、関数が多いだけで遅いわけではありません。

そして、もう1つ注意なのが、 色は全く関係ありません。

大事なので、もう一度言います!

色は全く関係ありません。

これは図を読みやすくするための手段らしいです。

まとめ

正直自分の記事を読むより、deeetさんの記事を繰り返し読むほうが良いw

10回ぐらい読み直して、ちょっと理解できた。

参考

GitHub - uber/go-torch: Stochastic flame graph profiler for Go programs GolangでFlame Graphを描く | SOTA Profiling Go Applications with Flamegraphs