CodeBlanks Logo Icon CodeBlanks

trace aracı

  • Go kursu
  • İleri seviye
  • Ders 57/68
  • 4 dk

go tool trace ile zaman çizelgesini öğrenirsin.

trace aracı

pprof örnekler toplar; go tool trace ise olayları zaman çizelgesinde gösterir: goroutine'lerin hangi P'de ne zaman çalıştığı, bloklandığı, GC'nin ne zaman devreye girdiği.

f, _ := os.Create("trace.out")
trace.Start(f)
defer trace.Stop()

// incelenecek kod

İnceleme: go tool trace trace.out tarayıcıda bir arayüz açar.

Görevler ve bölgeler

Trace'e kendi işaretlerini ekleyebilirsin; böylece zaman çizelgesinde iş birimlerini adıyla görürsün:

ctx, task := trace.NewTask(ctx, "siparis")
defer task.End()
trace.WithRegion(ctx, "odeme", func() {
    odemeAl()
})

Trace dosyaları büyür; birkaç saniyelik kayıt genellikle yeterlidir.

Uygulama Trace kaydı

runtime/trace ile kaydı bir bytes.Buffer'a başlat, trace.WithRegion(context.Background(), "hesap", ...) içinde 10'un karesini hesapla ve kaydı durdur. Sonucu ve buf.Len() > 0 değerini yazdır.

Başlangıç kodu

main.go
package main

import (
    "bytes"
    "context"
    "fmt"
    "runtime/trace"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "bytes"
    "context"
    "fmt"
    "runtime/trace"
)

func main() {
    var buf bytes.Buffer
    trace.Start(&buf)
    sonuc := 0
    trace.WithRegion(context.Background(), "hesap", func() {
        sonuc = 10 * 10
    })
    trace.Stop()
    fmt.Println(sonuc, buf.Len() > 0)
}

Beklenen çıktı

100 true

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Hangi soru için trace, pprof'tan daha uygundur?

  • Hangi satır en çok bellek ayırıyor?
  • Kaç test geçti?
  • Goroutine'ler neden paralel çalışmıyor? Doğru cevap
  • En çok CPU yiyen fonksiyon hangisi?

Açıklama: Paralellik, bekleme ve gecikme sorunları zamana bağlıdır; trace bunu görselleştirir. Toplam maliyet soruları pprof'un alanıdır.

2 Kaydı başlat

Soru
f, _ := os.Create("trace.out")
trace.____(f)
defer trace.Stop()
Cevap
f, _ := os.Create("trace.out")
trace.Start(f)
defer trace.Stop()

Açıklama: trace.Start olay kaydını başlatır; trace.Stop durdurur.

3 Araç ve odak

Kavram Anlamı
pprof CPU Toplam CPU maliyeti
pprof heap Bellek
trace Zaman çizelgesi
trace.WithRegion Adlandırılmış bölge

İleri seviye bölümündeki tüm dersler