0Pricing
Go Academy · Ders

Yığın ve Ayırma Profillemesi

Yığın profilleriyle bellek darboğazlarını bulma

Yığın ve Ayırma Profillemesi, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

Öbek profillemesi neden gerekli?

Aşırı bellek ayırmaları, çöp toplayıcı üzerindeki baskı nedeniyle Go programlarını yavaşlatır. Öbek profillemesi, en çok belleği hangi kod yollarının ayırdığını göstererek ayırmaları azaltmanızı sağlar.

Öbek profili yakalama

HTTP uç noktası aracılığıyla (net/http/pprof gerekir):

go tool pprof http://localhost:6060/debug/pprof/heap

Dosya tabanlı öbek profili

runtime/pprof kullanarak herhangi bir anda bir öbek profili yazın:

f, _ := os.Create("mem.prof")
pprof.WriteHeapProfile(f)
f.Close()

inuse ve alloc karşılaştırması

Öbek profilinin iki görünümü vardır: inuse_objects/inuse_space (şu anda canlı olanlar) ve alloc_objects/alloc_space (başlangıçtan beri toplam). Sıcak ayırma yollarını bulmak için alloc_space kullanın.

go tool pprof -alloc_space http://localhost:6060/debug/pprof/heap

go test -memprofile

Performans ölçümleri sırasında bellek profilini yakalayın:

go test -memprofile mem.prof -benchmem -bench=BenchmarkProcess ./...

MemStats

Canlı izleme için çalışma zamanı bellek istatistiklerini programlı olarak okuyun:

var ms runtime.MemStats
runtime.ReadMemStats(&ms)
fmt.Printf("Alloc: %v MiB\n", ms.Alloc/1024/1024)
fmt.Printf("NumGC: %v\n", ms.NumGC)

Kaçış analizi

Öbeğe kaçan değişkenler ayırmalara neden olur. Hangi değişkenlerin neden kaçtığını görmek için go build -gcflags=-m komutunu çalıştırın.

go build -gcflags="-m -m" ./...
// main.go:12:15: &User{...} escapes to heap

Ayırmaları azaltma: önceden ayırma

Son uzunluk biliniyorsa make([]T, 0, n) ile dilimleri önceden ayırın; böylece dilim büyürken tekrarlanan yeniden ayırmaları önlersiniz.

results := make([]Result, 0, len(input))

Yeniden kullanım için sync.Pool

Ayırma maliyetini zamana yaymak için yeniden kullanılabilir nesneleri (arabellekler, geçici dilimler) sync.Pool ile havuzlayın:

var pool = sync.Pool{
    New: func() any { return new(bytes.Buffer) },
}
buf := pool.Get().(*bytes.Buffer)
buf.Reset()
// use buf...
pool.Put(buf)

Değer ve işaretçi alıcıları

Büyük yapılar değer olarak geçirildiğinde her çağrıda kopyalanır. Kopyalamayı önlemek için işaretçiyle geçirin; ancak işaretçilerin değerin öbeğe kaçmasına neden olabileceğini unutmayın.

String ve []byte

String ile []byte arasında dönüştürme ayırma işlemi gerektirir. Sıcak kod yollarında baştan sona []byte kullanın ve yalnızca dize gerektiğinde sınırda String'e dönüştürün.

Hızlı Kontrol

pprof öbek profilinde -alloc_space neyi gösterir?

Özet: Öbek profillemesi

Temel noktalar:

  • -alloc_space toplam ayırmaları; inuse_space canlı olanları gösterir
  • go build -gcflags=-m kaçış analizini gösterir
  • Dilimleri önceden ayırın; sık yeniden kullanım için sync.Pool kullanın
  • Programlı izleme için runtime.ReadMemStats

Sıkça Sorulan Sorular

“Yığın ve Ayırma Profillemesi” dersi ücretsiz mi?

Evet — “Yığın ve Ayırma Profillemesi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“Yığın ve Ayırma Profillemesi” dersinde ne öğreneceğim?

Yığın profilleriyle bellek darboğazlarını bulma Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Yığın ve Ayırma Profillemesi” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. testing.B ile Karşılaştırma Testleri Yazma
  2. pprof ile CPU Profilleme
  3. Yığın ve Ayırma Profillemesi
  4. Yürütme İzleme
← Go Academy Sayfasına Dön