Heim  >  Artikel  >  Backend-Entwicklung  >  Beherrschen Sie die Verwendung von pprof in Go vollständig

Beherrschen Sie die Verwendung von pprof in Go vollständig

尚
nach vorne
2019-11-25 13:41:214272Durchsuche

Beherrschen Sie die Verwendung von pprof in Go vollständig

go hat das pprof-Paket zur Code-Leistungsüberwachung. Es gibt Pakete an zwei Orten:

net/http/pprof

runtime/pprof

Tatsächlich verwendet net/http/pprof lediglich das runtime/pprof-Paket, um es zu kapseln und auf dem http-Port verfügbar zu machen

pprof-Paket

Webserver

Wenn Ihr Go-Programm ein Webserver ist, der mit dem http-Paket gestartet wurde, möchten Sie den Status Ihres Webservers überprüfen. Zu diesem Zeitpunkt können Sie net/http/pprof auswählen. Sie müssen nur das Paket „net/http/pprof“ importieren.

Anschließend können Sie http://localhost:port/debug/pprof/ im Browser verwenden, um direkt den Status des aktuellen Webdienstes anzuzeigen, einschließlich CPU-Auslastung und Speichernutzung. Informationen zur spezifischen Verwendung finden Sie in den Anweisungen von Godoc.

Serviceprozess

Wenn Ihr Go-Programm kein Webserver, sondern ein Serviceprozess ist, können Sie auch das Paket net/http/pprof verwenden. Das ist auch das Paket net/http/pprof, und öffnen Sie dann eine andere Goroutine, um die Portüberwachung zu aktivieren.

Zum Beispiel:

go func() {
        log.Println(http.ListenAndServe("localhost:6060", nil)) 
}()

Anwendung

Wenn Ihr Go-Programm nur eine Anwendung ist, z. B. die Berechnung der Fabonacci-Folge, können Sie net nicht verwenden /http/pprof-Paket, Sie müssen runtime/pprof verwenden. Die spezifische Methode besteht darin, pprof.StartCPUProfile und pprof.StopCPUProfile zu verwenden. Zum Beispiel das folgende Beispiel:

var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file")

func main() {
    flag.Parse()
    if *cpuprofile != "" {
        f, err := os.Create(*cpuprofile)
        if err != nil {
            log.Fatal(err)
        }
        pprof.StartCPUProfile(f)
        defer pprof.StopCPUProfile()
    }
…

Fügen Sie beim Ausführen des Programms einen --cpuprofile-Parameter hinzu, z. B. fabonacci --cpuprofile=fabonacci.prof

Auf diese Weise werden die CPU-Informationen angezeigt, wenn die Das laufende Programm wird aufgezeichnet. XXX.prof wird aufgerufen.

Im nächsten Schritt können Sie diese Profi-Informationen verwenden, um Leistungsanalysediagramme zu erstellen (graphviz muss installiert sein).

Verwenden Sie das Go-Tool pprof (Anwendung) (Anwendungs-Prof-Datei)

Geben Sie pprof ein, verwenden Sie den Web-Befehl, um die SVG-Datei unter /tmp zu generieren. Die SVG-Datei kann durchsucht und unter dem Gerät angezeigt werden . So:

Beherrschen Sie die Verwendung von pprof in Go vollständig

Wenn Ihr Programm beispielsweise sehr einfach ist und nur eine println-Anweisung vorhanden ist, können Sie mit pprof.StartCPUProfile nichts drucken.

Beispiel

Nehmen wir go-tour als Beispiel. Dies ist ein Webprogramm, das ich

_ „net/http /pprof“ hinzugefügt habe.

Ich kann die Prof-Informationen direkt im Browser anzeigen

Beherrschen Sie die Verwendung von pprof in Go vollständig

CPU-Statusanalysediagramm erstellen

Als nächstes gehen wir Sie möchten ein CPU-Statusanalysediagramm erstellen. Rufen Sie das Go-Tool pprof http://localhost:3999/debug/pprof/profile

auf und es wird die 30-Sekunden-Profilerfassungszeit eingegeben. Aktualisieren Sie die Seite im Go-Tour-Browser und versuchen Sie, die CPU zum Generieren von Daten zu nutzen.

(pprof) top10
Total: 3 samples
       1 33.3% 33.3% 1 33.3% MHeap_AllocLocked
       1 33.3% 66.7% 1 33.3% os/exec.(*Cmd).closeDescriptors
       1 33.3% 100.0% 1 33.3% runtime.sigprocmask
       0 0.0% 100.0% 1 33.3% MCentral_Grow
       0 0.0% 100.0% 2 66.7% main.Compile
       0 0.0% 100.0% 2 66.7% main.compile
       0 0.0% 100.0% 2 66.7% main.run
       0 0.0% 100.0% 1 33.3% makeslice1
       0 0.0% 100.0% 2 66.7% net/http.(*ServeMux).ServeHTTP
       0 0.0% 100.0% 2 66.7% net/http.(*conn).serve

(pprof)web

Beherrschen Sie die Verwendung von pprof in Go vollständig

Für weitere Go-Sprachkenntnisse beachten Sie bitte die Spalte Go-Sprach-Tutorial.

Das obige ist der detaillierte Inhalt vonBeherrschen Sie die Verwendung von pprof in Go vollständig. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen