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
package main
import (
"bytes"
"context"
"fmt"
"runtime/trace"
)
func main() {
// buraya yaz
}Örnek çözüm
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
f, _ := os.Create("trace.out")
trace.____(f)
defer trace.Stop()
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 |