Sobes.tech
Principal

Goroutine sızıntısıyla nasıl mücadele ettiniz — izlediniz mi?

sobes.tech yapay zeka

AI'dan gelen yanıt

Goroutine sızıntısı, goroutine'ler bekleme veya kilitlenme durumunda kalıp tamamlanmadığında ortaya çıkar ve bu da bellek ve kaynak sızıntılarına yol açar. Bunu önlemek için:

  • Goroutine'lerin yaşam süresini yönetmek ve çalışmalarını iptal etmek için (context.Context) bağlamlar kullanmak.
  • Kanalları düzgünce kapatmak ve gönderme/alma sırasında kilitlenmelerden kaçınmak.
  • Aktif goroutine sayısını runtime.NumGoroutine() ile izlemek.
  • pprof kullanarak tamamlanmayan goroutine'leri tespit etmek.

Goroutine sayısının izlenmesine örnek:

package main

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

func main() {
    go func() {
        select {} // engelleyici goroutine
    }()

    time.Sleep(time.Second)
    fmt.Printf("Aktif goroutine sayısı: %d\n", runtime.NumGoroutine())
}

Düzenli izleme ve profil oluşturma, goroutine sızıntılarını zamanında tespit edip giderilmesine yardımcı olur.