Go-da yaddaş istifadəsini necə ölçmək və pprof nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da yaddaş istifadəsini müxtəlif üsullarla ölçmək mümkündür:
-
runtime.MemStats: Yaddaş statistikalarının anlıq görüntüsünü təmin edir, o cümlədən yığma ölçüsü, obyektlərin sayı, tullantıların toplanması və s. Ümumi yaddaş bölgüsü haqqında ümumi məlumat almaq üçün faydalıdır.
-
pprof profilatoru: Performans və resurs istifadəsini, o cümlədən yaddaşı analiz etmək üçün güclü vasitədir. O, müxtəlif vaxtlarda yığma istifadəsi profillərini toplaya və onları analiz edə bilər, bu da dar boğazları və yaddaş sızmalarını müəyyən etməyə kömək edir.
-
debug.FreeOSMemory(): Əməliyyat sisteminə yaddaşı məcburən azad edir. Bu, Go çalışma vaxtının nə qədər yaddaş saxladığını dolayısı ilə anlamağa kömək edə bilər.
pprof (net/http/pprof) Go-nun standart kitabxanasında olan və runtime/pprof paketindən pprof profilatoru ilə inteqrasiya olunan bir paketdir. CPU, yığma (yaddaş), kilidlər, goroutine və mutexlər kimi müxtəlif resursların profillərini toplamaq üçün HTTP interfeyslər təqdim edir.
İstifadə üçün:
net/http/pprof-u idxal edin.- HTTP serverini başladın.
- Profil üçün uyğun URL-lərə (
/debug/pprof/) daxil olun. - Toplanmış məlumatları analiz etmək üçün
go tool pprofalətindən istifadə edin.
runtime.MemStats-ın istifadəsinə nümunə:
import (
"fmt"
"runtime"
"time"
)
func main() {
var m runtime.MemStats
runtime.ReadMemStats(&m) // Yaddaş statistikalarını oxuyur
fmt.Printf("Alloc = %v MiB", bToMb(m.Alloc))
fmt.Printf("\tTotalAlloc = %v MiB", bToMb(m.TotalAlloc))
fmt.Printf("\tSys = %v MiB", bToMb(m.Sys))
fmt.Printf("\tNumGC = %v\n", m.NumGC)
// Yaddaş ilə işləmək nümunəsi
_ = make([]byte, 1024*1024*10) // 10MB ayırır
time.Sleep(100 * time.Millisecond) // GC-nin işləməsini gözləyir
runtime.ReadMemStats(&m)
fmt.Printf("Daha sonra: Alloc = %v MiB", bToMb(m.Alloc))
fmt.Printf("\tTotalAlloc = %v MiB", bToMb(m.TotalAlloc))
fmt.Printf("\tSys = %v MiB", bToMb(m.Sys))
fmt.Printf("\tNumGC = %v\n", m.NumGC)
}
func bToMb(b uint64) uint64 {
return b / 1024 / 1024
}
HTTP serverdə pprof istifadə nümunəsi:
import (
_ "net/http/pprof" // pprof handlerlərini qeydiyyatdan keçirmək üçün
"net/http"
"log"
)
func main() {
log.Println(http.ListenAndServe(":6060", nil)) // 6060 portunda dinləyir
}
Bu kodu işə saldıqdan sonra, http://localhost:6060/debug/pprof/ ünvanına daxil olaraq müxtəlif profillərə baxa bilərsiniz. Yığımın analizi üçün go tool pprof http://localhost:6060/debug/pprof/heap istifadə edilə bilər.