Profiling-Gehen web-Anwendung gebaut, mit Gorilla mux mit net/http/pprof
Ich habe eine relativ große web-Anwendung geschrieben, in der Go, die verwendet Gorilla mux für das routing. Vor kurzem habe ich realisiert, dass meine web-Anwendung ist ziemlich langsam und ich möchte ein Profil der web-Anwendung.
Nach der Lektüre über es, es scheint, dass net/http/pprof ist, was ich brauche. Aber ich kann es nicht laufen mit mux; selbst bei den banalsten web-Anwendung.
Wer weiß, wie zu machen, dass die Arbeit?
Hier ist ein Beispiel für einen trivialen code, der nicht funktioniert (d.h. nichts wird Ihnen im /debug
).
package main
import (
"fmt"
"github.com/gorilla/mux"
"math"
"net/http"
)
import _ "net/http/pprof"
func SayHello(w http.ResponseWriter, r *http.Request) {
for i := 0; i < 1000000; i++ {
math.Pow(36, 89)
}
fmt.Fprint(w, "Hello!")
}
func main() {
r := mux.NewRouter()
r.HandleFunc("/hello", SayHello)
http.ListenAndServe(":6060", r)
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
user983716 - vielen Dank für Ihre Frage und das ist die Lösung!
War ich nicht in der Lage, nutzen Sie die links von der web-index (http://[meine-server]/debug/pprof), bis ich fügte hinzu, ein paar Zeilen zu deiner Lösung, etwa so:
Wenn jemand hat das gleiche problem, ich hoffe, das hilft!
router.PathPrefix("/debug/pprof/").HandlerFunc(pprof.Index)
umfasst alles, was nicht explizit weitergeleitet.Meine bevorzugte Methode ist dabei einfach lassen
net/http/pprof
registrieren Sie sichhttp.DefaultServeMux
, und dann gehen alle Anfragen ab/debug/pprof/
zusammen:Ich finde, dass dieser Ansatz ist viel stabiler als eine, die an der Umsetzung hängt von einer versteckten Initialisierungs-Methode, und auch garantiert, dass Sie nichts vermissen.
Sorry für die Frage. Die Antwort ist in der init () - Funktion von pprof. Man muss nur hinzufügen, 4 Funktionen aus
pprof
auf die mux-router. Hier ist der Feste code von oben.Vorherigen Beispielen funktioniert das nicht wirklich auf meiner Seite.
Verwenden pprof in eine bestehende golang Projekt mit gorrila/mux, versuchen Sie, hinzufügen :
dann gehen Sie zu http://localhost:6061/debug/pprof/
Ich Tat etwas anderes, ich habe eine andere native http-server auf einem anderen port und es funktioniert einfach out of the box
Nun die pprof Endpunkt an :
http://localhost:6060/debug/pprof/ und die applcation läuft auf port :8080
Nur so:
Im mit https://github.com/julienschmidt/httprouter, aber ich habe gerade diese Antwort von der google-Suche.
Das ist, was ich getan habe
Brauche ich nur diese zwei Wege.
Diese Antwort ist kombinieren von @Damian und @user983716 Antworten.
Sollten die folgenden arbeiten:
Dies funktioniert für mich.