Özet - pprof
- Go kursu
- İleri seviye
- Ders 58/68
- 4 dk
CPU ve bellek profillerini birleştirerek bir analiz yazarsın.
Profil özeti
Performans çalışmasının sırası: ölç → en büyük maliyeti bul → değiştir → yeniden ölç. Araçlar:
net/http/pprofveyaruntime/pprof: CPU ve heap profili.go test -bench -cpuprofile -memprofile: tekrarlanabilir ölçüm.go tool trace: zamanlama ve paralellik.runtime.ReadMemStats: hızlı bellek ölçümü.
PGO: profil güdümlü optimizasyon
Go 1.21'den beri üretimden alınan CPU profili derleyiciye verilebilir. Derleyici sıcak fonksiyonları daha agresif inline eder; tipik kazanç %2–14'tür.
cp cpu.prof default.pgo // main paketinin klasörüne
go build // default.pgo otomatik kullanılırUygulama Önce/sonra ölçümü
İki birleştirme yöntemini testing.AllocsPerRun ile karşılaştır: biri döngüde s += "x", diğeri strings.Builder (Grow(100) ile). 100 eleman için iki ayırma sayısını tek satırda yazdır.
Başlangıç kodu
package main
import (
"fmt"
"strings"
"testing"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"strings"
"testing"
)
var sink string
func main() {
a := testing.AllocsPerRun(10, func() {
s := ""
for i := 0; i < 100; i++ {
s += "x"
}
sink = s
})
b := testing.AllocsPerRun(10, func() {
var sb strings.Builder
sb.Grow(100)
for i := 0; i < 100; i++ {
sb.WriteString("x")
}
sink = sb.String()
})
fmt.Println(a > b, b)
}Beklenen çıktı
true 1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Profilde bir fonksiyon toplam CPU'nun %2'sini kullanıyorsa onu 10 kat hızlandırmak ne kazandırır?
- Hiçbir şey ölçülemez
- En fazla yaklaşık %2 Doğru cevap
- %20
- Program 10 kat hızlanır
Açıklama: Kazanç, fonksiyonun toplam içindeki payıyla sınırlıdır (Amdahl yasası); önce en büyük paylara odaklanılır.
2 PGO dosyası
cp cpu.prof ____
go build
cp cpu.prof default.pgo
go build
Açıklama: main paketinin klasöründeki default.pgo, go build tarafından otomatik okunur.
3 Grubun özeti
| Kavram | Anlamı |
|---|---|
pprof |
Nerede harcanıyor? |
trace |
Ne zaman oluyor? |
-benchmem |
Ayırma sayısı |
default.pgo |
Profil güdümlü derleme |