CodeBlanks Logo Icon CodeBlanks

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/heap

Dosyaya 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

main.go
package main

import (
    "fmt"
    "runtime"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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

Soru
var m runtime.MemStats
runtime.____(&m)
Cevap
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ı

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