go test -cpuprofile
- Go kursu
- İleri seviye
- Ders 56/68
- 4 dk
Test sırasında profile almayı öğrenirsin.
Testlerle profil
Benchmark'lar profil almak için en kolay yerdir; ayrı kod yazmadan bayrak eklemek yeterlidir:
go test -bench=Ayristir -cpuprofile cpu.out -memprofile mem.out ./parser
go tool pprof parser.test cpu.outProfil yalnızca benchmark'ın ölçtüğü kodu kapsar; üretim trafiğini değil, tekrarlanabilir bir senaryoyu gösterir.
Diğer test profilleri
-blockprofile kanallarda ve kilitlerde bekleme noktalarını, -mutexprofile kilit çekişmesini kaydeder. -trace trace.out ise olay zaman çizelgesi üretir. Profil alırken -run=^$ eklemek normal testlerin çalışmasını engeller ve sonuçları temiz tutar.
Uygulama Benchmark fonksiyonu
testing.Benchmark ile programdan benchmark çalıştır: strings.Repeat("go", 100) çağıran bir func(b *testing.B) ver. Sonucun N değerinin 0'dan büyük olduğunu yazdır.
Başlangıç kodu
package main
import (
"fmt"
"strings"
"testing"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"strings"
"testing"
)
func main() {
r := testing.Benchmark(func(b *testing.B) {
for i := 0; i < b.N; i++ {
strings.Repeat("go", 100)
}
})
fmt.Println(r.N > 0)
}Beklenen çıktı
true
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>-benchmem</code> bayrağı ne ekler?
- CPU profili
- Yarış denetimi
- Test kapsamı
- İşlem başına bayt ve ayırma sayısı Doğru cevap
Açıklama: -benchmem çıktıya B/op ve allocs/op sütunlarını ekler; profil dosyası üretmez.
2 Bellek profili bayrağı
go test -bench=. ____ mem.out
go test -bench=. -memprofile mem.out
Açıklama: -memprofile benchmark sırasında heap profilini dosyaya yazar.
3 go test bayrakları
| Kavram | Anlamı |
|---|---|
-cpuprofile |
CPU profili |
-memprofile |
Bellek profili |
-benchmem |
B/op, allocs/op |
-run=^$ |
Testleri atla |