Health checks og tuning til produktion
HEALTHCHECK, tini og signalhåndtering i containere
Health checks og tuning til produktion er en gratis Go Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Go Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Go Academy-kurset indeholder 4 lektioner i alt.
Endepunkter til sundhedstjek
Et endepunkt til sundhedstjek gør det muligt for belastningsfordelere og orkestratorer at kontrollere, om tjenesten er i live og klar til at håndtere trafik. To almindelige typer er livstegn (kører den?) og parathed (kan den håndtere forespørgsler?).
Endepunkt for livstegn
Returnerer 200 OK, hvis processen er i live. En enkel handler, der altid lykkes — det er tilstrækkeligt, at processen kører:
mux.HandleFunc("/healthz/live", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})Endepunkt for parathed
Returnerer 200, kun når tjenesten er klar (databasen er forbundet, cachen er varmet op, migreringer er gennemført). Returnerer 503 under opstart eller ved en forringet tilstand:
mux.HandleFunc("/healthz/ready", func(w http.ResponseWriter, r *http.Request) {
if err := db.PingContext(r.Context()); err != nil {
w.WriteHeader(http.StatusServiceUnavailable); return
}
w.WriteHeader(http.StatusOK)
})Kubernetes-prober
Konfigurér prober for livstegn og parathed i din Kubernetes Deployment-specifikation:
livenessProbe:
httpGet: { path: /healthz/live, port: 8080 }
initialDelaySeconds: 5
periodSeconds: 10
readinessProbe:
httpGet: { path: /healthz/ready, port: 8080 }
initialDelaySeconds: 3
periodSeconds: 5Justering af GOMAXPROCS
I containere bruger GOMAXPROCS som standard antallet af CPU'er på værten, ikke containerens CPU-grænse. Brug go.uber.org/automaxprocs til at indstille den korrekt ud fra cgroup-grænserne.
import _ "go.uber.org/automaxprocs"Hukommelsesgrænser
Indstil GOMEMLIMIT (Go 1.19+) til containerens hukommelsesgrænse, så GC kan bruge hukommelsen mere aggressivt, før OOM-killeren udløses:
import "runtime/debug"
debug.SetMemoryLimit(512 * 1024 * 1024) // 512 MiBJustering af GC
Indstil GOGC for at styre GC-frekvensen. Standardværdien er 100 (GC kører, når heapen fordobles). Lavere værdier reducerer hukommelsesforbruget på bekostning af hyppigere GC; højere værdier bruger mere hukommelse til gengæld for mindre GC.
os.Setenv("GOGC", "200") // allow heap to grow 2× before GCJustering af forbindelsespuljen
Indstil grænserne for databasens forbindelsespulje, så de passer til containerens ressourcegrænser og databasens max_connections:
db.SetMaxOpenConns(25)
db.SetMaxIdleConns(10)
db.SetConnMaxLifetime(5 * time.Minute)Eksponering af målinger
Eksponér Prometheus-målinger på en separat port (ikke API'ets hovedport) for at undgå at lække interne data til eksterne klienter:
go func() {
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":9090", nil)
}()Kontrolleret nedlukning i Kubernetes
Indstil terminationGracePeriodSeconds i pod-specifikationen, så der er tilstrækkelig tid til timeouten for nedlukningen. Returnér straks 503 fra parathedstjekket, når SIGTERM modtages.
Profilering i produktion
Aktivér pprof på en ikke-offentlig port med godkendelse. Eksponér det aldrig offentligt — det afslører intern tilstand og kan bruges til at lave DoS-angreb mod tjenesten.
Hurtigt tjek
Hvorfor bør GOMAXPROCS indstilles ud fra containerens CPU-grænser i stedet for værtsmaskinens CPU'er?
Opsummering: sundhedstjek og justering til produktion
Vigtige punkter:
- Livstegn: processen er i live; parathed: tjenesten kan håndtere trafik
- automaxprocs indstiller GOMAXPROCS ud fra containerens CPU-grænser
- GOMEMLIMIT forhindrer OOM-afslutninger; GOGC justerer GC-frekvensen
- Eksponér målinger på en separat port, der kun er intern
Lær Go med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “Health checks og tuning til produktion” gratis?
Ja — alle 3 lektioner i læringssporet Go Academy, inklusive “Health checks og tuning til produktion”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Go Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Health checks og tuning til produktion”?
HEALTHCHECK, tini og signalhåndtering i containere Du øver dig i Go Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Go Academy?
Der kræves ingen tidligere erfaring. Go Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Health checks og tuning til produktion”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Go Academy-lektion?
Ja. Alle Go Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Docker-builds i flere stadier til Go
- Miljøkonfiguration og secrets
- Docker Compose til lokal udvikling
- Health checks og tuning til produktion