Slik fikser du intern feil 500 i Next.js Server Components
Fiks Next.js Server Component 500-feil ved å spore serverlogger, sjekke datahenting og miljøvariabler, håndtere feil og verifisere produksjonsbygget.
Målet er ikke bare å få CrashLoopBackOff til å forsvinne i noen sekunder. En god fiksing holder containeren i gang, holder Poden Ready når den skal motta trafikk, stopper at omstartstallene øker, og produserer logger som viser en normal applikasjonsoppstart. I lokal Minikube bør du også bekrefte at Minikube-klusteret selv er sunt før du gjenoppbygger det.
Kubernetes' gjeldende dokumentasjon beskriver CrashLoopBackOff som en backoff-tilstand som oppstår når en container gjentatte ganger starter, feiler og startes på nytt. Kubernetes forskyver gradvis ytterligere omstarter for å unngå en tett feilsyklus. Etiketten er derfor et symptom på gjentatt containerfeil, ikke selve rotårsaken. Se Kubernetes Pod-livssyklusdokumentasjon.
Denne veiledningen bruker fire diagnostiske faser. Følg dem i rekkefølge og stopp når du har identifisert og korrigert den faktiske årsaken. Minikube er ment for lokal læring og utvikling, så den samme applikasjonsnivådiagnosen overføres til andre Kubernetes-kluster, mens de Minikube-spesifikke gjenopprettingsstegene ikke nødvendigvis gjelder for produksjon. Se den gjeldende Minikube startdokumentasjonen.
kubectl logs viser en normal oppstartsbane i stedet for at den samme fatale feilen gjentar seg.minikube status viser et sunt lokalt kluster når klusterhelsen var i tvil.Krev ikke at omstartstelleren til en eksisterende Pod går tilbake til null. Kubernetes registrerer hvor mange ganger containeren har blitt startet på nytt i den Poden; en vellykket reparasjon kan etterlate et ikke-null historisk antall. Det som betyr noe, er at tallet slutter å øke. Hvis en Deployment-utrulling oppretter en ny Pod, starter den nye Poden vanligvis med sitt eget ferske omstartstall.
Start med Pod-listen:
kubectl get pods -A
Hvis du allerede kjenner navnerommet, avgrens kommandoen:
kubectl get pods -n my-namespace
Beskriv deretter den berørte Poden:
kubectl describe pod <pod-name> -n <namespace>
Se på fire felt i containerdelen:
CrashLoopBackOff.Error eller OOMKilled.En subtil men nyttig distinksjon: Podens overordnede fase kan fortsatt være Running mens en av containerne venter i CrashLoopBackOff. STATUS-kolonnen som skrives ut av kubectl get pods er en praktisk lesbar oppsummering, ikke en komplett diagnose av Pod-livssyklusstatus.
Kvalitetskontroll: ved slutten av denne fasen bør du vite den nøyaktige Poden, navnerommet og containeren som starter på nytt. Hvis Poden har flere containere, identifiser hvilken som feiler før du leser logger.
Tving ikke alle oppstartsproblemer inn i denne veiledningen. ImagePullBackOff, ErrImagePull, Pending og ContainerCreating peker mot ulike feilstadier. For eksempel skjer et bilde-hentingsproblem før applikasjonsprosessen starter, så applikasjonslogger kan ikke eksistere ennå.
Endre tilnærming når: Events-delen peker mot bilde-henting, volummontering, planlegging eller opptaksfeil i stedet for en container som starter og avsluttes.
For en Pod med én container, start med:
kubectl logs <pod-name> -n <namespace>
Når containeren starter på nytt raskt, er den mest nyttige kommandoen ofte:
kubectl logs <pod-name> -n <namespace> --previous
Kubernetes dokumenterer --previous som alternativet som skriver ut logger fra den forrige instansen av containeren i Poden. Hvis Poden inneholder mer enn én container, spesifiser den som feiler:
kubectl logs <pod-name> -n <namespace> -c <container-name> --previous
Se offisiell kubectl logs-referanse.
Klassifiser den første meningsfulle fatale feilen i stedet for å fokusere på den siste "prosessen avsluttet"-linjen. Typiske mønstre inkluderer:
| Bevis | Sannsynlig retning | Hva du skal teste neste |
|---|---|---|
| Stack trace pluss avslutningskode 1 | Applikasjons- eller oppstartskonfigurasjonsfeil | Sjekk kommando, argumenter, miljø, filer og avhengighetsadresser |
Reason: OOMKilled | Containeren overskred minsegrensen eller ble drept på grunn av minsepress | Undersøk grenser, applikasjonens minsebruk og Minikube/node-kapasitet |
| Liveness- eller startup-probefeil i Events | Helsesjekk feiler før eller etter oppstart | Test probesti, port, timing og oppstartstid |
| DNS- eller tilkoblingsfeil til en annen tjeneste | Feil tjenestenavn, navnerom, port eller avhengighetsberedskap | Undersøk Service-objekter og DNS i klusteret |
| Manglende fil, nøkkel eller miljøvariabel | ConfigMap, Secret, montering eller manifest-mismatch | Sammenlign Deploymenten med de refererte objektene |
Kvalitetskontroll: du bør kunne formulere en falsifiserbar hypotese som "applikasjonen avsluttes fordi DATABASE_HOST peker til en ikke-eksisterende Service", ikke bare "Kubernetes er ødelagt".
En avslutningskode på 137 vises vanligvis når en prosess mottar SIGKILL, men det sterkere Kubernetes-spesifikke signalet er Last State: Terminated med Reason: OOMKilled. Kubernetes' ressursforvaltningsdokumentasjon viser denne kombinasjonen når en container overskrider minsegrensen. Se Kubernetes ressursforvaltningsdokumentasjon.
Nyttig handling: baser diagnosen på avslutningsårsaken og omkringliggende Events, ikke tallet 137 alene.
Når du vet hvorfor containeren avsluttes, endre den minste tingen som adresserer den årsaken. Å starte Poden på nytt gjentatte ganger reparerer ikke en dårlig kommando, manglende konfigurasjon, feilende helsesjekk eller utilstrekkelig minne.
Inne i en normal Kubernetes-Pod deler containere i samme Pod et nettverksnavnerom og kan kommunisere med hverandre over localhost. En database som kjører i en annen Pod, nås ikke via applikasjonens localhost. Kubernetes oppretter DNS-navn for Services slik at arbeidsbelastninger kan oppdage dem etter tjenestenavn. Se Kubernetes nettverkskonsepter og DNS for Services og Pods.
Hvis Serviceen din heter postgres i samme navnerom, kan applikasjonen kanskje bruke:
DATABASE_HOST=postgres
På tvers av navnerom, bruk et navneromskvalifisert navn som postgres.data eller det fullt kvalifiserte tjenestenavnet som er passende for klusterdomenet ditt.
Verifiser Serviceen før du redigerer applikasjonen:
kubectl get svc -A
kubectl get endpointslices -n <namespace>
Endre tilnærming når: Serviceen eksisterer, men har ingen brukbare backend-endepunkter. I det tilfellet er det ikke nok å fikse klientens vertsnavn; diagnostiser serverens Deployment eller Service-selector.
Undersøk referansene i arbeidsbelastningsmanifestet:
kubectl get deployment <name> -n <namespace> -o yaml
kubectl get configmap -n <namespace>
kubectl get secret -n <namespace>
Kubernetes støtter miljøvariabler fra env, ConfigMaps og Secrets. En nyttig detalj er at ConfigMap-verdier som forbrukes som miljøvariabler ikke oppdateres i en allerede kjørende prosess når ConfigMap endres; Poden må erstattes. Det samme gjelder Secret-verdier som forbrukes som miljøvariabler. Se Kubernetes ConfigMap-dokumentasjon og Kubernetes Secret-injeksjonsdokumentasjon.
For en Deployment, etter å ha korrigert konfigurasjonen, er en utrullingsomstart en måte å opprette nye Pods på:
kubectl rollout restart deployment/<name> -n <namespace>
kubectl rollout status deployment/<name> -n <namespace>
Kvalitetskontroll: verifiser at den nye Poden faktisk bruker den tiltenkte verdien. Anta ikke at redigering av en ConfigMap umiddelbart endrer en miljøvariabel inne i en eksisterende container.
Kubernetes definerer tre probetyper med ulike formål:
En vanlig misforståelse er at en feilende readiness-probe forårsaker en omstart. Det gjør den ikke. En readiness-feil gjør Poden unready; gjentatte liveness- eller startup-probefeil kan forårsake containeromstarter. Se Kubernetes probe-konsepter og den offisielle probe-konfigurasjonsveiledningen.
Hvis applikasjonen legitimt trenger en lang oppstart, vurder en startup-probe med nok failureThreshold × periodSeconds-tid til å dekke realistisk oppstart. Deaktiver ikke alle prober bare for at statusen skal se grønn ut; det fjerner nyttig helsebeskyttelse.
Kvalitetskontroll: proben bør teste en betingelse som gjenspeiler dens formål, og applikasjonen bør overleve normal oppstart uten å bli drept for tidlig.
Sammenlign først containerens minsegrense med dens faktiske oppstartsbehov. Et lite eksempel:
resources:
requests:
memory: "256Mi"
limits:
memory: "512Mi"
Hvis Reason: OOMKilled vises og applikasjonen legitimt krever mer enn den konfigurerte grensen, øk grensen forsiktig eller reduser applikasjonens minsebruk. Hvis Minikube selv er sulten på minne, kan det å bare øke containergrensen enkelt flytte problemet til noden.
Den gjeldende Minikube-dokumentasjonen sier at den standard lokale oppsettet forventer minst 2 CPU-er, 2 GB ledig minne og 20 GB ledig diskplass. Minikube støtter også endring av konfigurert klusterminne, noe som krever en omstart. Se Minikubes gjeldende startkrav.
Endre tilnærming når: flere urelaterte Pods feiler eller blir evikert, eller Minikube selv er usunt. Det peker utover én Deployments minsegrense.
Etter å ha anvendt fiksen, se på arbeidsbelastningen i stedet for å sjekke den én gang:
kubectl get pods -n <namespace> -w
For en Deployment:
kubectl rollout status deployment/<name> -n <namespace>
Les deretter de nye loggene:
kubectl logs <new-pod-name> -n <namespace>
Et sterkt suksessignal er ikke enkelt STATUS=Running. Bekreft alle disse der det er aktuelt:
READY når den forventede verdien, som 1/1.Kjør:
minikube status
kubectl get pods -A
Minikube status-kommandoen rapporterer tilstanden til det lokale klusteret, inkludert vert, kubelet, API-server og kubeconfig-status. Se den offisielle minikube status-referansen.
Hvis kontrollplanet eller kjerne-system-Pods er usunne, samle klusterdiagnostikk:
minikube logs --problems
minikube logs
Minikubes dokumentasjon er eksplisitt på at minikube logs er for feilsøking av det lokale Kubernetes-klusteret, ikke din brukers applikasjonskode. Bruk kubectl logs for applikasjonscontaineren og minikube logs når klusteret eller noden selv er mistenkelig. Se den gjeldende minikube logs-referansen og Minikube feilsøkingsveiledning.
Endre tilnærming når: kjerne-Kubernetes-komponenter feiler, API-serveren er utilgjengelig, Minikube-status er usunn, eller mange urelaterte arbeidsbelastninger feiler samtidig. På det tidspunktet er det usannsynlig at fortsettelse av å redigere én Deployment løser det underliggende problemet.
Kun etter at du har skilt et applikasjonsproblem fra et klusterproblem. Å gjenopprette et lokalt utviklingskluster kan være rimelig når klusteret er engangsbruk, manifestene dine er reproduiserbare, og Minikube selv er korrupt eller feilkonfigurert. Det er et dårlig første svar på en applikasjon som avsluttes med en tydelig stack trace.
Kommandoer som minikube delete fjerner det lokale klusteret. Det kan også fjerne lokal Kubernetes-tilstand og data du forventet å beholde. Ikke bruk sletting som en diagnostisk snarvei når et persistent volum, lokal database eller manuelt opprettet ressurs inneholder den eneste kopien av noe viktig.
Kvalitetsterskel for å bytte til klustergjenoppretting: du har bekreftet at feilen ikke forklares av arbeidsbelastningens kommando, konfigurasjon, avhengighet, prober eller ressursgrenser; Minikube-helsen er unormal; og den lokale tilstanden er enten sikkerhetskopiert eller trygt reproduiserbar.
| Funn | Neste handling | Ikke gjør ennå |
|---|---|---|
Applikasjons stack trace i --previous logger | Fiks applikasjonen/konfigurasjonen indikert av feilen | Slett Minikube-klusteret |
Reason: OOMKilled | Sjekk containergrenser og node/Minikube-minne | Anta at alle tilfeller av exit 137 er identiske |
| Gjentatte liveness/startup-probefeil | Fiks endepunkt, port, timing eller startup-probedesign | Deaktiver alle helsesjekker permanent |
| Readiness-probe feiler, men containeren fortsetter å kjøre | Fiks readiness eller avhengighetstilgjengelighet | Diagnostiser det som en omstartårsak uten andre bevis |
| ConfigMap/Secret endret, men gammel env-verdi gjenstår | Erstatt/start Poden på nytt etter validering av ny konfigurasjon | Forvent at prosessmiljøvariabler lastes inn på nytt umiddelbart |
| Minikube status/kjerne-Pods usunne | Bruk Minikube-diagnostikk og undersøk klusterressurser | Fortsett å redigere én app-Deployment uendelig |
En lokal CrashLoopBackOff kan avsløre en applikasjonsfeil, avhengighetsfeil, probe-feil, ressursgrense, arkitekturmismatch, manglende fil, tillatelsesproblem eller mange andre oppstartsfeil. Ingen fast kommandosekvens kan identifisere alle årsaker uten å lese den faktiske avslutningsårsaken, Events og logger.
Videre beviser ikke en fiks som fungerer i Minikube automatisk produksjonsklarhet. Produksjonskluster kan bruke ulike lagringsklasser, sikkerhetspolicyer, ingress-kontrollere, nodearkitekturer, nettverkspolicyer, ressurskvoter, secret-systemer eller eksterne tjenester. Minikube er verdifullt for å reprodusere og forstå container-nivåfeilen, men miljøspesifikk atferd må fortsatt testes der applikasjonen faktisk skal kjøre.
Last State, avslutningsårsak, avslutningskode, omstartstall og Events.kubectl logs --previous for containere som starter på nytt raskt.minikube status og minikube logs kun når klusterhelsen også er mistenkelig.Den mest pålitelige måten å fikse CrashLoopBackOff på er å behandle det som et signal til å undersøke, ikke som diagnosen. I en sunn feilsøkingsprosess innsnevrer hver kommando årsaken: Pod-tilstanden forteller deg hva som starter på nytt, tidligere logger forteller deg hvorfor den siste kjøringen feilet, manifestet og Events viser hva Kubernetes ba containeren gjøre, og Minikube-diagnostikk forteller deg om det lokale klusteret selv er involvert. Når disse lagene er enige, er fiksen vanligvis mye mindre – og mye lettere å verifisere – enn å slette og gjenoppbygge alt.
Fiks Next.js Server Component 500-feil ved å spore serverlogger, sjekke datahenting og miljøvariabler, håndtere feil og verifisere produksjonsbygget.
Diagnostiser og fiks Kubernetes CrashLoopBackOff i lokal Minikube ved å sjekke pod-tilstand, tidligere logger, avslutningsårsaker, prober, konfigurasjon, minsegrenser og klusterhelse.
Fiks Docker Desktop-motoren som stopper på Windows 11 ved å sjekke Docker-status, oppdatere og starte WSL 2 på nytt, verifisere virtualisering og bruke diagnostikk før nullstilling.
Løs Vite-feilen 'process is not defined' ved å erstatte Node-stil bruk av process.env, konfigurere VITE_-variabler riktig og sjekke avhengigheter.
Løs PyTorch CUDA out-of-memory-feil med en praktisk arbeidsflyt: mål GPU-minne, reduser arbeidssettet, bruk AMP og akkumulering, sjekkpoint-aktiveringer, og juster allokatoren kun ved behov.
Fiks manglende Access-Control-Allow-Origin CORS-feil i Express.js ved å diagnostisere opprinnelsen, konfigurere cors trygt, håndtere preflight og verifisere headers.
Fiks React-feilen “Cannot read properties of undefined (reading 'map')” ved å spore opp den udefinerte verdien, korrigere state og API-data, og legge til sikre gjengivelseskontroller.
Løs Webpack-feilen «Can’t resolve 'fs'» ved å velge riktig løsning: flytt Node-kun-kode til serveren, bruk en nettlesersikker avhengighet, sett fs:false kun hvis valgfritt, eller mål mot Node riktig.
Fiks manglende Supabase API-nøkler i Next.js, Vite, Node, utplasseringer og Edge Functions. Bruk gjeldende navn på publiserbare/secret-nøkler, korrekte env-filer og trygge verifiseringstrinn.
Løs feilen “flutter: command not found” på macOS ved å finne Flutter SDK, legge til bin-mappen i PATH, laste inn Zsh på nytt og verifisere oppsettet.