CodeBlanks Logo Icon CodeBlanks

CPU profiling

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

CPU profili oluşturmayı ve incelemeyi öğrenirsin.

CPU profili

HTTP olmayan programlarda CPU profili runtime/pprof ile dosyaya yazılır:

f, _ := os.Create("cpu.prof")
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()

agirIs()

Profil saniyede yaklaşık 100 örnek alır; hangi fonksiyonun ne sıklıkla yığında göründüğünü kaydeder.

pprof komutları

go tool pprof cpu.prof etkileşimli kabuk açar:

(pprof) top10        // en pahalı 10 fonksiyon
(pprof) list agirIs  // satır satır maliyet
(pprof) web          // çağrı grafiği

go tool pprof -http=:8081 cpu.prof ise tarayıcıda alev grafiği (flame graph) dahil görsel arayüz açar.

Uygulama Profilli program

runtime/pprof ile CPU profilini os.Stdout yerine bir bytes.Buffer'a yaz: StartCPUProfile(&buf), bir döngüde 1'den 1.000.000'a kadar topla, StopCPUProfile(). Toplamı yazdır.

Başlangıç kodu

main.go
package main

import (
    "bytes"
    "fmt"
    "runtime/pprof"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "bytes"
    "fmt"
    "runtime/pprof"
)

func main() {
    var buf bytes.Buffer
    pprof.StartCPUProfile(&buf)
    toplam := 0
    for i := 1; i <= 1000000; i++ {
        toplam += i
    }
    pprof.StopCPUProfile()
    fmt.Println(toplam)
}

Beklenen çıktı

500000500000

Soru ve cevaplar

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

1 <code>top</code> çıktısında <code>flat</code> ile <code>cum</code> farkı nedir?

  • cum yalnızca goroutine sayısı
  • flat yalnızca fonksiyonun kendi süresi, cum çağırdıklarıyla toplam süre Doğru cevap
  • flat bellek, cum CPU
  • Aynı şeydir

Açıklama: Yüksek flat, fonksiyonun içindeki kodun pahalı olduğunu; yüksek cum ama düşük flat ise maliyetin çağrılan fonksiyonlarda olduğunu gösterir.

2 Profili başlat

Soru
f, _ := os.Create("cpu.prof")
pprof.____(f)
defer pprof.StopCPUProfile()
Cevap
f, _ := os.Create("cpu.prof")
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()

Açıklama: StartCPUProfile örneklemeyi başlatır; StopCPUProfile bitirir ve dosyayı tamamlar.

3 pprof komutu

Kavram Anlamı
top En pahalı fonksiyonlar
list Satır satır maliyet
web Çağrı grafiği
-http Tarayıcı arayüzü

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