CodeBlanks Logo Icon CodeBlanks

pprof nedir?

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

pprof profiling aracının temelini öğrenirsin.

pprof nedir?

pprof, programın zamanını ve belleğini nerede harcadığını gösteren Go'nun profil aracıdır. Tahmin yerine ölçüm yapmanı sağlar. Bir HTTP servisine tek satırla eklenir:

import _ "net/http/pprof"

go http.ListenAndServe("localhost:6060", nil)

Ardından go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30 ile 30 saniyelik CPU profili alınır.

Profil türleri

/debug/pprof/ altında birkaç profil vardır: profile (CPU), heap (bellek), goroutine (tüm goroutine yığınları), block ve mutex (bekleme noktaları), allocs (tüm ayırmalar). Goroutine profili, sızan goroutine'leri bulmak için çok kullanışlıdır.

Uygulama Goroutine sayısı

runtime.NumGoroutine() çalışan goroutine sayısını verir. Üç goroutine başlat (her biri <-dur ile beklesin) ve sayıyı yazdır, sonra close(dur) çağır.

Başlangıç kodu

main.go
package main

import (
    "fmt"
    "runtime"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "fmt"
    "runtime"
)

func main() {
    dur := make(chan struct{})
    for i := 0; i < 3; i++ {
        go func() { <-dur }()
    }
    fmt.Println(runtime.NumGoroutine())
    close(dur)
}

Beklenen çıktı

4

Soru ve cevaplar

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

1 pprof uç noktasını neden <code>localhost</code>'a bağlarsın?

  • pprof başka adreste çalışmaz
  • Port çakışmasın diye
  • Profil verisi iç bilgileri açığa çıkarır; dışarıya açık olmamalıdır Doğru cevap
  • Daha hızlı çalışsın diye

Açıklama: Profiller fonksiyon adlarını, yığınları ve bellek içeriğine dair ipuçlarını gösterir; ayrıca profil almak sunucuya yük bindirir.

2 pprof'u ekle

Soru
import _ "net/http/____"
Cevap
import _ "net/http/pprof"

Açıklama: net/http/pprof içe aktarılınca /debug/pprof/ uç noktalarını varsayılan mux'a kaydeder.

3 Profil ve sorusu

Kavram Anlamı
profile CPU nerede harcanıyor?
heap Bellek nerede tutuluyor?
goroutine Hangi goroutine'ler var?
mutex Kilitte nerede bekleniyor?

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