Diagnosticarea și Profilarea Vizuală a Execuției cu runtime/trace în Go în Go

Ghid complet pentru instrumentul de diagnosticare runtime/trace în Go: vizualizarea latențelor de planificare ale goroutine-urilor, blocajele de apeluri de sistem (syscalls) și fazele Garbage Collector-ului prin interfața grafică go tool trace.

Sintaxă
trace.Start(f); defer trace.Stop() | go test -trace=trace.out | go tool trace trace.out

În timp ce instrumentele standard de profiling (precum pprof) arată ce funcții consumă cel mai mult CPU sau memorie, pachetul runtime/trace capturează comportamentul în timp al întregului runtime Go: când este planificată o goroutine, când se blochează pe un canal sau mutex, când rulează un apel de sistem (syscall) și durata exactă a fiecărei faze a Garbage Collector-ului.

Capturarea unei urme de execuție în cod
package main

import (
    "os"
    "runtime/trace"
    "sync"
    "time"
)

func main() {
    // 1. Creăm fișierul unde va fi scris jurnalul de trace:
    f, err := os.Create("trace.out")
    if err != nil {
        panic(err)
    }
    defer f.Close()

    // 2. Pornim capturarea:
    if err := trace.Start(f); err != nil {
        panic(err)
    }
    defer trace.Stop()

    // 3. Executăm sarcini paralele pentru analiză:
    var wg sync.WaitGroup
    for i := 0; i < 5; i++ {
        wg.Add(1)
        go func(id int) {
            defer wg.Done()
            time.Sleep(100 * time.Millisecond)
        }(i)
    }
    wg.Wait()
}

Vizualizarea urmei în browser cu go tool trace

După rularea programului, lansați serverul web de analiză:

go tool trace trace.out
# Noul instrument de trace din Go 1.22+ deschide automat interfața la adresa: http://127.0.0.1:port
  • Goroutine Analysis: Arată timpul petrecut în stările Runnable, Running, Blocked (pe Sync, Net sau Syscall).
  • Network Blocking Profile: Identifică conexiunile lente de rețea care blochează goroutine-urile.
  • Synchronization Blocking: Evidențiază mutex-urile care provoacă timpi mari de așteptare.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Diagnosticarea și Profilarea Vizuală a Execuției cu runtime/trace în Go

Ai o nelămurire despre utilizarea comenzii Diagnosticarea și Profilarea Vizuală a Execuției cu runtime/trace în Go sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.