Hälsokontroller och produktionsjustering
HEALTHCHECK, tini och signalhantering i containrar
Hälsokontroller och produktionsjustering är en gratis lektion i Go Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Go Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Go Academy innehåller totalt 4 lektioner.
Slutpunkter för hälsokontroller
Med en slutpunkt för hälsokontroller kan lastbalanserare och orkestrerare kontrollera att tjänsten körs och är redo att ta emot trafik. Två vanliga typer är livstecken (kör den?) och beredskap (kan den hantera begäranden?).
Livsteckensslutpunkt
Returnerar 200 OK om processen körs. En enkel hanterare som alltid lyckas — att processen körs är tillräckligt:
mux.HandleFunc("/healthz/live", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})Beredskapsslutpunkt
Returnerar 200 endast när tjänsten är redo (databasen är ansluten, cachen är uppvärmd och migreringarna är klara). Returnerar 503 under uppstart eller vid försämrat tillstånd:
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
Konfigurera prober för livstecken och beredskap i specifikationen för er Kubernetes Deployment:
livenessProbe:
httpGet: { path: /healthz/live, port: 8080 }
initialDelaySeconds: 5
periodSeconds: 10
readinessProbe:
httpGet: { path: /healthz/ready, port: 8080 }
initialDelaySeconds: 3
periodSeconds: 5Justera GOMAXPROCS
I containrar använder GOMAXPROCS som standard värdmaskinens antal processorer, inte containerns CPU-gräns. Använd go.uber.org/automaxprocs för att ställa in värdet korrekt utifrån cgroup-gränserna.
import _ "go.uber.org/automaxprocs"Minnesgränser
Ange GOMEMLIMIT (Go 1.19 och senare) till containerns minnesgräns så att GC kan använda minnet mer aggressivt innan OOM-dödaren aktiveras:
import "runtime/debug"
debug.SetMemoryLimit(512 * 1024 * 1024) // 512 MiBJustera GC
Ange GOGC för att styra hur ofta GC körs. Standardvärdet är 100 (GC körs när heapen har fördubblats). Lägre värden minskar minnesanvändningen men leder till tätare GC; högre värden använder mer minne men ger mindre frekvent GC.
os.Setenv("GOGC", "200") // allow heap to grow 2× before GCJustera anslutningspoolen
Ange gränser för databasanvändningens anslutningspool som är lämpliga för containerns resursgränser och databasens max_connections:
db.SetMaxOpenConns(25)
db.SetMaxIdleConns(10)
db.SetConnMaxLifetime(5 * time.Minute)Exponera mätvärden
Exponera Prometheus-mätvärden på en separat port (inte på huvudporten för API:t) för att undvika att interna data läcker till externa klienter:
go func() {
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":9090", nil)
}()Graciös avstängning i Kubernetes
Ange terminationGracePeriodSeconds i pod-specifikationen för att ge tillräckligt med tid för avstängningstidsgränsen. Returnera omedelbart 503 från beredskapsproben när SIGTERM tas emot.
Profilering i produktion
Aktivera pprof på en icke-offentlig port med autentisering. Exponera den aldrig offentligt — den avslöjar internt tillstånd och kan användas för att utföra DoS mot tjänsten.
Snabbkontroll
Varför bör GOMAXPROCS ställas in utifrån containerns CPU-gränser i stället för värdmaskinens processorer?
Sammanfattning: hälsokontroller och justering för produktion
Viktiga punkter:
- Livstecken: processen körs; beredskap: tjänsten kan ta emot trafik
- automaxprocs ställer in GOMAXPROCS utifrån containerns CPU-gränser
- GOMEMLIMIT förhindrar OOM-avslutningar; GOGC styr hur ofta GC körs
- Exponera mätvärden på en separat, endast internt åtkomlig port
Lär dig Go med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 51
- Lektioner
- 203
Vanliga frågor
Är lektionen ”Hälsokontroller och produktionsjustering” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Go Academy, inklusive ”Hälsokontroller och produktionsjustering”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Go Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Hälsokontroller och produktionsjustering”?
HEALTHCHECK, tini och signalhantering i containrar Ni övar på Go Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Go Academy?
Du behöver inga förkunskaper. Utbildningen i Go Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Hälsokontroller och produktionsjustering”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Go Academy-lektionen?
Ja. Varje Go Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Docker-byggen i flera steg för Go
- Miljökonfiguration och hemligheter
- Docker Compose för lokal utveckling
- Hälsokontroller och produktionsjustering