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
package main
import (
"fmt"
"runtime"
)
func main() {
// buraya yaz
}Örnek çözüm
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
import _ "net/http/____"
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? |