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