0

folgende Spielzeug Code gegeben, würde ich erwarten, dassWarum funktioniert der Profiler nicht für mich?

go tool pprof cpu.prof 

laufen und nützliche Informationen über waster1 und waster2 zu bekommen, aber wenn ich oben in pprof laufen, alles, was ich bekommen:

Showing nodes accounting for 0, 0% of 0 total 
     flat flat% sum%  cum cum% 

Es ist möglich, das Problem ist, dass ich WSL bin mit Ubuntu unter Windows 10.

Hier laufen ist der Code ich verwende:

package main 

import (
    "fmt" 
    "log" 
    "os" 
    "runtime/pprof" 
) 

func waster2() int { 
    j := 0; 
    for i := 0; i < 100; i++ { 
     j += waster1() 
    } 
    return j 
} 

func waster1() int { 
    j := 0; 
    for i := 0; i < 10000; i++ { 
     j++ 
    } 
    return j 
} 

func main() { 
    f, err := os.Create("cpu.prof") 

    if err != nil { 
     log.Fatal("could not create CPU profile: ", err) 
    } 

    if err := pprof.StartCPUProfile(f); err != nil { 
     log.Fatal("could not start CPU profile: ", err) 
    } 

    defer pprof.StopCPUProfile() 

    j := waster2() 

    fmt.Println(j) 
} 
+0

Sieht aus wie es das Gleiche tut auf Debian läuft von selbst, so dass die Windows-10, was ist ein roter Hering . –

+0

Zuerst müssen Sie die Binärdatei als Argument für 'pprof' bereitstellen. Wie lange läuft Ihr Programm? Möglicherweise verfügen Sie nicht über genügend Stichproben, um ein aussagekräftiges Profil zu erstellen. – JimB

+0

@JimB fügt den Funktionen (über 10 Sekunden Laufzeit jetzt) ​​und der Binärdatei zum Tool-Befehl noch keine Ausgabe hinzu. –

Antwort

1

Das Ausführen unter Windows erzeugt auch keine Samples im Profiler. Die folgende article von den Go-Blog heißt es wie folgt:

When CPU profiling is enabled, the Go program stops about 100 times per second and 
records a sample consisting of the program counters on the currently executing 
goroutine's stack. 

Wenn Ihr Code ausgeführt dauert weniger als 2 ms, so nicht der Profiler Proben nehmen können. Erhöhen Sie Ihre Loop-Anzahl von 100 auf 10000 und dann sollten Sie einige Beispiele in Ihrer Ausgabe sehen.

Auf einem anderen Hinweis, vergessen Sie nicht, Ihre Datei f zu schließen. Wie so:

if err != nil { 
    log.Fatal("could not create CPU profile: ", err) 
} 
defer f.Close() 
+0

Ich habe die Funktionen und die Verschiebung hinzugefügt. Es lief über 10 Sekunden und immer noch keine Ausgabe in pprof. –

+1

Der Profiler verfolgt keine Zeit, in der die CPU nicht funktioniert. Haben Sie versucht, die maximale Schleifenanzahl zu erhöhen? –

1

Das Problem ist, dass Sie WSL verwenden Ubuntu unter Windows zu laufen 10.

Verwandte Themen