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/heapDosya 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/heapgo 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 heapAyı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
- testing.B ile Karşılaştırma Testleri Yazma
- pprof ile CPU Profilleme
- Yığın ve Ayırma Profillemesi
- Yürütme İzleme