イノベーション エンジニアブログ


株式会社イノベーションのエンジニアたちの技術系ブログです。ITトレンド・List Finderの開発をベースに、業務外での技術研究などもブログとして発信していってます!


このエントリーをはてなブックマークに追加

Goのプロファイラを使おう! その2

こんにちは。 エンジニアのNew塚本です。

最近、地元でお祭りがありました。午前中から呑めるっていいですね!

今回も、前回に引き続きプロファイラについてのお話をのせたいと思います。

今回やる事

プロファイリングデータを可視化する

使用するプログラム

前回と同じプログラムを使用しました。
Azureキューストレージからデータを取得、ごにょごにょした処理後にDBにInsertして、Azureキューストレージからデータを削除するバッチ処理です。

プロファイルデータの画像化

プログラムには、以下のコードが入っているのでバッチを実行すれば、プロファイルデータが出力されます。

f, _ := os.Create("test_track.profile")
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()

グラフ化のためgraphvizを入れます。

brew install graphviz

バッチ実行後に以下のコマンドを実行し、画像を生成する。

go tool pprof --svg ./tracking test_track.profile > track.svg

track.svgが出力されるので、さっそくブラウザで見てみます。画像が荒いのはすみません。

track.png
解析

・goroutineを使ってるので、runtime系の関数が使われているが遅いのかわからない・・。
・画像中央のSyscallが120ms of 160msとなってますが遅いのだろうか?
・time nowも12%位使われてる。ログ出力する際にNow()を使っているからと思われる。

ムムム。目立って遅いとこなくね?

まとめ

ビジュアル化するとスタックが見やすし、簡単にできるところがいいです。
ただし、前回も書きましたが、これ、指標がないとやっただけになるので注意です。

おわり。