Memory profiling
- Go kursu
- İleri seviye
- Ders 55/68
- 4 dk
Bellek profili ve alloc ayrımını öğrenirsin.
Bellek profili
Heap profili iki görünüm sunar: inuse (şu anda tutulan bellek; sızıntı aramak için) ve alloc (programın başından beri ayrılan toplam; GC baskısını azaltmak için).
go tool pprof -sample_index=inuse_space http://localhost:6060/debug/pprof/heap
go tool pprof -sample_index=alloc_space http://localhost:6060/debug/pprof/heapDosyaya yazmak için pprof.WriteHeapProfile(f) kullanılır.
runtime.MemStats
Hızlı bir ölçüm için profil yerine runtime.ReadMemStats yeterlidir:
var m runtime.MemStats
runtime.ReadMemStats(&m)
fmt.Println("heap:", m.HeapAlloc/1024, "KB", "GC:", m.NumGC)HeapAlloc tutulan heap'i, TotalAlloc toplam ayırmayı, NumGC çöp toplama sayısını verir. Çağrı kısa bir dünya durdurma (STW) gerektirir; sık çağırma.
Uygulama Ayırmayı ölç
runtime.ReadMemStats ile önce TotalAlloc değerini al, ardından make([]byte, 1<<20) ile 1 MB ayır ve tekrar ölç. Farkın en az 1 MB olup olmadığını (fark >= 1<<20) yazdır.
Başlangıç kodu
package main
import (
"fmt"
"runtime"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"runtime"
)
var sink []byte
func main() {
var a, b runtime.MemStats
runtime.ReadMemStats(&a)
sink = make([]byte, 1<<20)
runtime.ReadMemStats(&b)
fark := b.TotalAlloc - a.TotalAlloc
fmt.Println(fark >= 1<<20)
}Beklenen çıktı
true
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bellek sürekli artıyorsa önce hangi görünüme bakarsın?
- inuse_space Doğru cevap
- alloc_objects
- CPU profili
- trace
Açıklama: inuse, hâlâ erişilebilir durumda tutulan belleği gösterir; sızıntı buradaki büyüyen kalemlerden bulunur.
2 İstatistikleri oku
var m runtime.MemStats
runtime.____(&m)
var m runtime.MemStats
runtime.ReadMemStats(&m)
Açıklama: ReadMemStats bellek istatistiklerini verilen yapıya doldurur.
3 Bellek ölçütleri
| Kavram | Anlamı |
|---|---|
inuse_space |
Şu an tutulan |
alloc_space |
Toplam ayrılan |
HeapAlloc |
Canlı heap baytı |
NumGC |
GC sayısı |