go / expert
Snippet
Profiling spezifischer Logik mit pprof-Labels
Standard-CPU-Profiling in Go zeigt, wo Zeit in Funktionen verbracht wird, unterscheidet aber oft nicht zwischen verschiedenen Kontexten (z. B. welcher Benutzer die Last verursacht hat). pprof.Do ermöglicht es, Key-Value-Labels an den Kontext einer Goroutine zu binden. Bei einem CPU-Profil werden diese Labels aufgezeichnet, sodass das Profil nach spezifischen Kategorien gefiltert werden kann.
snippet.go
1
2
3
4
5
6
func processUserRequest(ctx context.Context, userID string) {labels := pprof.Labels("worker", "image-processor", "user_id", userID)pprof.Do(ctx, labels, func(ctx context.Context) {expensiveTransformation(ctx)})}
Erklärung
1
pprof.Labels("worker", "image-processor", "user_id", userID)
Definiert benutzerdefinierte Attribute, die der aktuellen Ausführung zugeordnet werden.
2
pprof.Do(ctx, labels, func(ctx context.Context)
Umschließt die Funktionsausführung mit den angegebenen Profiling-Metadaten.