Middle+
Kokie yra būdai identifikuoti ir diagnozuoti našumo problemas gamyboje?
sobes.tech AI
Atsakymas iš AI
- Metrių stebėjimas:
- Naudojant įmontuotus paketus:
expvar(paprasti raktas-vertė metrikos),runtime(GC, goroutine ir kt. statistika). - Trečiųjų šalių bibliotekos: Prometheus, Datadog, New Relic.
- Stebėti RPS, užklausų vėlavimą, klaidas, išteklių naudojimą (CPU, RAM).
- Naudojant įmontuotus paketus:
- Profilavimas:
- Naudojant paketą
net/http/pprofHTTP paslaugoms. - Naudojant paketą
runtime/pprofCPU, atminties, užraktų, goroutine profilių generavimui. - Analizuojant profilius naudojant įrankį
go tool pprof.
# Pavyzdys, kaip naudoti `go tool pprof` go tool pprof http://localhost:6060/debug/pprof/heap # Krūvos profilis- Profilavimo tipai: CPU, Heap, Goroutine, Blocking, Mutex, ThreadCreate, Trace.
- Naudojant paketą
- Traukinys:
- Naudojant paketą
golang.org/x/net/trace. - Naudojant OpenTracing/OpenTelemetry paskirstytam traukiniui.
- Stebėti užklausos kelią per sistemą, nustatyti siauras vietas paslaugų sąveikoje.
// Pavyzdys, kaip naudoti trace import "golang.org/x/net/trace" func handleRequest(w http.ResponseWriter, r *http.Request) { tr := trace.New("my_service", "handleRequest") defer tr.Finish() // Įvykių registravimas trase tr.LazyLog("Pradėti užklausos apdorojimą", false) // ... užklausos apdorojimo logika ... tr.LazyLog("Užklausos apdorojimas baigtas", false) } - Naudojant paketą
- Logų analizė:
- Logų surinkimas ir centralizuotas saugojimas (ELK Stack, Loki/Grafana).
- Anomalių, klaidų, lėtų užklausų paieška loguose.
- Logų ir traukinių integracija įvykių sujungimui.
- Naudojant specializuotas APM sprendimus:
- Dynatrace, AppDynamics, New Relic.
- Siūlo išsamias priemones stebėjimui, profilavimui ir traukiniui.
- Stebėjimo, profilavimo ir traukimo palyginimas:
| Įrankis | Paskirtis | Detalumo lygis | Ovehead |
|---|---|---|---|
| Stebėjimas | Bendra sistemos būklė, tendencijos | Žemas | Žemas |
| Profilavimas | Karštų taškų nustatymas (funkcijos, atlaisvinimai) | Aukštas | Vidutinis |
| Traukinys | Užklausos kelias, komponentų sąveika | Vidutinis | Vidutinis/Aukštas |
- Atlikti apkrovos testus prieš diegiant į gamybą.
- Naudoti
go testsuGo Dogplėtiniu funkcijų ir metodų bandomiesiems matavimams. - Surinkti ir analizuoti atminties dump'us, siekiant nustatyti atminties nutekėjimus ar per didelį naudojimą.