https://software.intel.com/en-us/blogs/2014/05/10/debugging-performance-issues-in-go-programsのような記事に基づいて、Go(golang)のパフォーマンス解析に飛び込んでいます。Go CPUプロファイルに関数呼び出し情報がありません
しかし、実際のプロファイルプログラムでは、生成されたCPUプロファイルにはほとんど情報がありません。 goツールは、プロファイルが空であるか、関数呼び出しに関する情報がないことを通知します。これは、OS XとLinuxの両方で発生します。
私はこの状況の最小の例を生成しました - 私は同様の方法でプロファイルを収集し、実際のプログラムでも同じ問題に直面しています。ここで
はminiprofile/main.go
のソースコードです:
package main
import (
"fmt"
"os"
"runtime/pprof"
)
func do_something(prev string, limit int) {
if len(prev) < limit {
do_something(prev+"a", limit)
}
}
func main() {
f, err := os.Create("./prof")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
do_something("", 100000)
}
私はほとんどすべての時間がdo_somethingする別の再帰呼び出しに費やされていることを伝えるCPUのプロフィールを見ることを期待しています。
しかし、これは(上記の最小限のアプリがminiprofileと呼ばれる)が起こる - 非常に有用ではない:
$ go version
go version go1.6.2 darwin/amd64
$ go install .
$ miniprofile
$ go tool pprof --text prof
1.91s of 1.91s total ( 100%)
flat flat% sum% cum cum%
1.91s 100% 100% 1.91s 100%
私は恐ろしく間違った方法で何かをやっていますか?