CodeBlanks Logo Icon CodeBlanks

GOGC ve GOMEMLIMIT

GOGC ve GOMEMLIMIT çevre değişkenlerini öğrenirsin.

GOGC ve GOMEMLIMIT

GOGC (varsayılan 100), canlı heap'in yüzde kaç büyümesine izin verildikten sonra GC başlayacağını belirler: canlı heap 100 MB ise sonraki GC ~200 MB'ta başlar. Büyük GOGC daha az GC ama daha çok bellek; küçük GOGC tersini verir.

GOGC=200 ./app        # daha seyrek GC
GOGC=off ./app        # GC kapalı (dikkat!)
GOMEMLIMIT=1GiB ./app # yumuşak bellek sınırı

GOMEMLIMIT (Go 1.19) toplam belleğe yumuşak bir üst sınır koyar; sınıra yaklaşınca GC sıklaşır.

Konteynerde iyi ayar

512 MB sınırlı bir konteynerde yaygın tarif: GOMEMLIMIT'i sınırın ~%90'ına koymak. Böylece Go bellek dolmadan GC'yi sıklaştırır ve OOM ile öldürülmez. Çok yüksek trafikte GOGC=off + GOMEMLIMIT birleşimi GC'yi yalnızca gerektiğinde çalıştırır; ama canlı heap sınırı aşarsa GC sürekli çalışır (death spiral), bu yüzden dikkatle izlenmelidir.

Uygulama GC yüzdesini değiştir

runtime/debug ile eski := debug.SetGCPercent(50) çağır, ardından debug.SetGCPercent(eski) ile geri al ve dönen değeri (50) yazdır. Ayrıca debug.SetMemoryLimit(-1) ile mevcut sınırı oku ve 0'dan büyük olduğunu yazdır.

Başlangıç kodu

main.go
package main

import (
    "fmt"
    "runtime/debug"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "fmt"
    "runtime/debug"
)

func main() {
    eski := debug.SetGCPercent(50)
    fmt.Println(debug.SetGCPercent(eski))
    fmt.Println(debug.SetMemoryLimit(-1) > 0)
}

Beklenen çıktı

50
true

Soru ve cevaplar

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

1 Canlı heap 50 MB ve GOGC=100 ise bir sonraki GC yaklaşık ne zaman başlar?

  • Heap ~150 MB olunca
  • Her 2 dakikada bir
  • Heap ~100 MB olunca Doğru cevap
  • Heap ~50 MB olunca

Açıklama: Hedef = canlı heap × (1 + GOGC/100) = 50 × 2 = 100 MB.

2 Koddan ayarla

Soru
eski := debug.____(200)
Cevap
eski := debug.SetGCPercent(200)

Açıklama: runtime/debug.SetGCPercent GOGC değerini çalışma anında değiştirir ve eskisini döndürür.

3 Ayar ve etkisi

Kavram Anlamı
GOGC=50 Sık GC, az bellek
GOGC=400 Seyrek GC, çok bellek
GOGC=off GC kapalı
GOMEMLIMIT Yumuşak bellek sınırı

Uzman bölümündeki tüm dersler