FProfは、シンプルな関数レベルのプロファイリングツールです。
FProf is a simple function level profiling tool.
go get github.com/shiba6v/go-fprof@main
- 開始時に
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()
で挟むと、好きな区間を計測することもできます。
破壊的変更を入れる際は新しいバージョンのディレクトリを切ろうと思いますが、ISUCONなどでの使用時に挙動が変わっても責任は取れません。 そのため、コミットハッシュを指定しての使用や、forkしての使用を推奨します。
defer fprof.FProf()()
の追加を自動化したいと思っています。- ASTを使ってビルド時に埋め込むのも考えられるが、任意のビルドプロセスに適合するかは怪しいです。
- fprof.bashやFPROF_IGNOREを使って自動化を試みた残骸が残っています。