CodeBlanks Logo Icon CodeBlanks

Ö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/pprof veya runtime/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ır

Uygulama Ö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

main.go
package main

import (
    "fmt"
    "strings"
    "testing"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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ı

Soru
cp cpu.prof ____
go build
Cevap
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

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