shiba6v / go-fprof

ISUCON用 Goプロファイリングツール

Home Page:https://shiba6v.hatenablog.com/entry/2022/07/23/235305

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

FProf

About

FProfは、シンプルな関数レベルのプロファイリングツールです。
FProf is a simple function level profiling tool.

Install

go get github.com/shiba6v/go-fprof@main

Usage

  • 開始時にfprof.InitFProf()を追加
  • 各関数の始めにdefer fprof.FProf()()を追加
  • fprof.AnalizeFProfResult()でプロファイリング結果を出力
func A() {
	defer fprof.FProf()() // 追加。各関数の始めに付ける。
	// some process
	time.Sleep(1 * time.Second)
}

func main() {
	fprof.InitFProf() // 追加。開始時の初期化。
	A()
	fmt.Println(fprof.AnalizeFProfResult()) // 追加。プロファイリング結果を出力。
}

結果

FProf Result [us]
Sum      1000883, Max      1000883, Avg      1000883, Min      1000883, Count            1, L11 main.A

基本的な使い方は、 Example Goroutine を参照してください。 ISUCONなど、サーバーで使う場合は Example Echo を参照してください。

fpr := fprof.FProf()fpr()で挟むと、好きな区間を計測することもできます。

Disclaimer

破壊的変更を入れる際は新しいバージョンのディレクトリを切ろうと思いますが、ISUCONなどでの使用時に挙動が変わっても責任は取れません。 そのため、コミットハッシュを指定しての使用や、forkしての使用を推奨します。

Future Plan

  • defer fprof.FProf()()の追加を自動化したいと思っています。
    • ASTを使ってビルド時に埋め込むのも考えられるが、任意のビルドプロセスに適合するかは怪しいです。
    • fprof.bashやFPROF_IGNOREを使って自動化を試みた残骸が残っています。

About

ISUCON用 Goプロファイリングツール

https://shiba6v.hatenablog.com/entry/2022/07/23/235305

License:MIT License


Languages

Language:Go 100.0%