Sobes.tech
Middle+

Jakie są metody identyfikacji i diagnozy problemów z wydajnością w produkcji?

sobes.tech AI

Odpowiedź od AI

  • Monitorowanie metryk:
    • Użycie wbudowanych pakietów: expvar (proste metryki klucz-wartość), runtime (statystyki GC, goroutine itp.).
    • Biblioteki zewnętrzne: Prometheus, Datadog, New Relic.
    • Śledzenie RPS, opóźnień zapytań, błędów, zużycia zasobów (CPU, RAM).
  • Profilowanie:
    • Użycie pakietu net/http/pprof dla usług HTTP.
    • Użycie pakietu runtime/pprof do generowania profili CPU, pamięci, blokad, goroutine.
    • Analiza profili za pomocą narzędzia go tool pprof.
    # Przykład użycia go tool pprof
    go tool pprof http://localhost:6060/debug/pprof/heap  # Profil sterty
    
    • Typy profilowania: CPU, Heap, Goroutine, Blocking, Mutex, ThreadCreate, Trace.
  • Trace:
    • Użycie pakietu golang.org/x/net/trace.
    • Użycie OpenTracing/OpenTelemetry do rozproszonego śledzenia.
    • Śledzenie ścieżki zapytania przez system, identyfikacja wąskich gardeł w interakcji usług.
    // Przykład użycia trace
    import "golang.org/x/net/trace"
    
    func handleRequest(w http.ResponseWriter, r *http.Request) {
        tr := trace.New("moja_usluga", "handleRequest")
        defer tr.Finish()
    
        // Logowanie zdarzeń w śledzeniu
        tr.LazyLog("Rozpoczęcie przetwarzania żądania", false)
    
        // ... logika obsługi żądania ...
    
        tr.LazyLog("Zakończenie przetwarzania żądania", false)
    }
    
  • Analiza logów:
    • Zbieranie i centralne przechowywanie logów (ELK Stack, Loki/Grafana).
    • Wyszukiwanie anomalii, błędów, wolnych zapytań w logach.
    • Integracja logów z śledzeniem w celu powiązania zdarzeń.
  • Użycie specjalistycznych rozwiązań APM:
    • Dynatrace, AppDynamics, New Relic.
    • Zapewniają kompleksowe narzędzia do monitorowania, profilowania i śledzenia.
  • Porównanie monitorowania, profilowania i śledzenia:
Narzędzie Cel Poziom szczegółowości Overhead
Monitorowanie Ogólny stan systemu, trendy Niski Niski
Profilowanie Wykrywanie gorących punktów (funkcji, alokacji) Wysoki Średni
Śledzenie Ścieżka zapytania, interakcja komponentów Średni Średni/Wysoki
  • Przeprowadzenie testów obciążeniowych przed wdrożeniem do produkcji.
  • Użycie Go Dog (wtyczka do go test) do benchmarkowania na poziomie funkcji/metod.
  • Zbieranie i analiza zrzutów pamięci (Heap Dumps) w celu wykrycia wycieków pamięci lub nadmiernego zużycia.