Î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.
Întrebări & Exemple de Cod:
Diagnosticarea și Profilarea Vizuală a Execuției cu runtime/trace în GoAi o nelămurire despre utilizarea comenzii
Diagnosticarea și Profilarea Vizuală a Execuției cu runtime/trace în Gosau 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.