Sobes.tech
Junior

Dokąd się zwrócić, jeśli serwer działa wolno?

sobes.tech AI

Odpowiedź od AI

  1. Monitorowanie systemu:

    • Sprawdzić obciążenie CPU, użycie pamięci, wejście/wyjście dysku.
    • Używać narzędzi takich jak Prometheus, Grafana, top, htop.
  2. Logi aplikacji:

    • Przejrzeć logi pod kątem błędów, ostrzeżeń, śladów stosu.
    • Zwrócić uwagę na długie zapytania, blokady.
  3. Profilowanie kodu:

    • Używać standardowego pakietu pprof do analizy wydajności.
    • Szukać "wąskich gardeł" - funkcji zużywających dużo CPU lub pamięci.
// Przykład użycia pprof
import (
	"log"
	"net/http"
	_ "net/http/pprof" // Rejestracja obsługi pprof
)

func main() {
	go func() {
		log.Println(http.ListenAndServe("localhost:6060", nil))
	}()
	// Główny kod aplikacji
}
  • Wizualizować wyniki profilowania za pomocą Graphviz lub narzędzi go tool pprof.
  1. Połączenia z bazą danych:

    • Sprawdzić wolne zapytania.
    • Optymalizować zapytania SQL, dodawać indeksy.
    • Upewnić się, że pula połączeń jest odpowiednia.
  2. Sieć:

    • Sprawdzić opóźnienia i utratę pakietów między klientem a serwerem, a także między komponentami systemu.
  3. Usługi zewnętrzne:

    • Jeśli aplikacja korzysta z API zewnętrznych, sprawdzić ich responsywność.
  4. Konfiguracja:

    • Sprawdzić ustawienia systemu operacyjnego, runtime Go (GOMAXPROCS), serwera WWW (Nginx, Caddy).
  5. Paralelizm i współbieżność:

    • Analizować użycie gorutyn i kanałów, szukać deadlocków lub nadmiernego tworzenia gorutyn.
  6. GC (garbage collector):

    • Monitorować aktywność garbage collectora.
    • Duża liczba alokacji lub długie pauzy GC mogą wskazywać na problemy z pamięcią.
  7. Wdrażanie i infrastruktura:

    • Sprawdzić stan hosta, kontenera, maszyny wirtualnej.
    • Upewnić się, że zasoby są wystarczające.