CodeBlanks Logo Icon CodeBlanks

Özet - Runtime

GOMAXPROCS, Gosched ve Stack'i birleştirerek bir izleyici yazarsın.

Runtime özeti

Bu grupta çalışma zamanıyla konuşmayı öğrendin: NumCPU, NumGoroutine, runtime/metrics ile gözlem; GOMAXPROCS ile paralellik ayarı; Gosched ile yol verme; Stack ve Caller ile teşhis; Goexit ile goroutine sonlandırma.

GOTRACEBACK=all ./app   // çökmede tüm goroutine'ler
GODEBUG=gctrace=1,schedtrace=1000 ./app

debug.SetTraceback ve sınırlar

runtime/debug paketi ek düğmeler sunar: SetTraceback("all") çökme çıktısını genişletir, SetMaxStack tek goroutine'in yığın sınırını (varsayılan 1 GB, 64 bit) ayarlar, SetMaxThreads M sınırını (10.000) değiştirir, FreeOSMemory boş belleği işletim sistemine iade etmeye zorlar.

Uygulama Sızıntı dedektörü

once := runtime.NumGoroutine() al. 5 goroutine başlat; hepsi bir dur kanalını beklesin. close(dur) çağır, time.Sleep(20 * time.Millisecond) bekle ve sayının eski değere döndüğünü (runtime.NumGoroutine() == once) yazdır.

Başlangıç kodu

main.go
package main

import (
    "fmt"
    "runtime"
    "time"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "fmt"
    "runtime"
    "time"
)

func main() {
    once := runtime.NumGoroutine()
    dur := make(chan struct{})
    for i := 0; i < 5; i++ {
        go func() { <-dur }()
    }
    close(dur)
    time.Sleep(20 * time.Millisecond)
    fmt.Println(runtime.NumGoroutine() == once)
}

Beklenen çıktı

true

Soru ve cevaplar

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

1 Bir serviste goroutine sızıntısından şüpheleniyorsan önce ne izlersin?

  • Zamanla goroutine sayısının artışını Doğru cevap
  • NumCPU değerini
  • GOOS değerini
  • Derleme süresini

Açıklama: Sürekli artan NumGoroutine (ya da /sched/goroutines metriği) sızıntı işaretidir; goroutine profili nerede takıldıklarını gösterir.

2 Çökme ayrıntısı

Soru
____=all ./app
Cevap
GOTRACEBACK=all ./app

Açıklama: GOTRACEBACK=all panic'te yalnızca çöken değil tüm goroutine'lerin yığınını yazdırır.

3 Grubun özeti

Kavram Anlamı
NumGoroutine Sızıntı izleme
GOMAXPROCS Paralellik
runtime.Caller Satır bilgisi
Goexit Defer'li çıkış

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