Ich habe versucht, in Go (Golang) Leistungsanalyse zu tauchen, basierend auf Artikel wie https://software.intel.com/en-us/blogs/2014/05/10/debugging-performance-issues-in-go-programs.Go CPU-Profil fehlt Funktionsaufruf Informationen
In den tatsächlichen profilierten Programmen haben die generierten CPU-Profile jedoch sehr wenig Informationen. Das go-Tool teilt mit, dass das Profil leer ist oder keine Informationen über Funktionsaufrufe enthält. Dies geschieht sowohl unter OS X als auch unter Linux.
Ich habe ein minimales Beispiel für diese Situation erstellt - ich sammle das Profil in ähnlicher Weise und konfrontiert die gleichen Probleme in tatsächlichen Programmen auch.
Hier ist der Quellcode für 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)
}
Ich erwarte ein CPU-Profil zu sehen, dass die Zeit fast alles erzählt hat auf verschiedene rekursiven Aufrufen ausgegeben worden do_something.
Allerdings geschieht dies (die minimale App oben genannt miniprofile) - nicht sehr nützlich:
$ 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%
Bin ich etwas in einer fürchterlich falsch gemacht?