Slik fikser du «ENOSPC: Systemgrense for filovervåkere nådd» i Linux

Hvis et Linux-utviklingsverktøy plutselig stopper med ENOSPC: System limit for number of file watchers reached, kan meldingen være misvisende. ENOSPCleses vanligvis som «ingen plass igjen på enheten», men i denne spesifikke banen betyr det ofte ikke at disken din er full. Linux- inotify_add_watch()manualen sier ENOSPCat kan returneres når grensen per bruker for inotify-overvåkninger er nådd, eller når kjernen ikke kan tildele en nødvendig ressurs. Denne forskjellen er viktig fordi sletting av filer kanskje ikke gjør noe for å løse problemet.

Denne veiledningen går først gjennom diagnosen, deretter den minst forstyrrende løsningen, og til slutt en vedvarende konfigurasjon. Kommandoene gjelder for Linux-systemer som bruker kjernens inotify- grensesnitt, som lar applikasjoner overvåke filer og mapper for endringer. Utviklingsservere, IDE-er, synkroniseringsklienter, testkjørere og byggeverktøy er ofte avhengige av det.

Dokumentasjonen for Linux man-pages ble sjekket 13. september 2026. De viktigste referansene er den nåværende inotify_add_watch(2) manualen og inotify(7) oversikten .

Det du trenger før du endrer noe

Du trenger en terminal, og for å endre kjerneparametere, en konto som kan bruke sudo. Lagre ulagret arbeid før du stopper utviklingsservere eller editorer. Merk også hvor den feilende kommandoen kjører: direkte på Linux, i en virtuell maskin, i WSL eller inne i en container. En container kan dele kjerneinnstillinger med verten sin og har kanskje ikke lov til å endre en sysctl på vertsnivå.

Ikke begynn med å kopiere en veldig stor overvåkingsgrense fra et foruminnlegg. Sjekk først den nåværende innstillingen din og identifiser om foreldede eller dupliserte overvåkingsprosesser bruker den.

Trinn 1: Bekreft at dette er inotify watcher-feilen

Kjør kommandoen som mislyktes og les hele feilen. Typiske utløsere inkluderer å starte en JavaScript-utviklingsserver, en testkjører for filovervåking eller et IDE-arbeidsområde som inneholder et veldig stort katalogtre. Den viktige frasen er «systemgrense for antall filovervåkere nådd».

Illustrativ Linux-terminal som viser en Vite-utviklingskommando som slutter med en ENOSPC-systemgrense for filovervåkere nådd feil.
Eksempel på watcher-limit-feil i en utviklingsterminal. Prosjektnavnet og -versjonen som vises er illustrerende; verktøyet og stakksporet ditt kan variere.

Hvis feilen i stedet oppstår ENOSPCunder skriving av en fil, sjekk diskkapasitet og inode-tilgjengelighet med kommandoer som df -hog df -i. Denne artikkelen handler spesifikt om inotify watcher-limit-formen av ENOSPC.

Trinn 2: Les de gjeldende inotify-grensene

Linux eksponerer inotify-grenser under /proc/sys/fs/inotify/. En watch er et overvåket filsystemobjekt i en inotify-instans. Kjernedokumentasjonen skiller mellom tre kontroller:

  • max_user_watches: maksimalt antall overvåkninger for én ekte bruker-ID.
  • max_user_instances: maksimalt antall inotify-forekomster for én ekte bruker-ID.
  • max_queued_events: maksimalt antall hendelser i kø for en inotify-instans.

Sjekk dem uten å endre noe:

sysctl fs.inotify.max_user_watches
sysctl fs.inotify.max_user_instances
sysctl fs.inotify.max_queued_events

Du kan også lese den første verdien direkte:

cat /proc/sys/fs/inotify/max_user_watches
Linux-terminal som viser eksempelverdier returnert for fs.inotify.max_user_watches og fs.inotify.max_user_instances.
Les verdiene på din egen maskin i stedet for å anta en fast Linux-standard. Tallene som vises her er eksempler, ikke anbefalte verdier.

Ikke forveksle fs.inotify.max_user_watchesmed fs.epoll.max_user_watches. De er forskjellige kjernemekanismer. For denne feilen bryr du deg vanligvis om inotify-banen.

Trinn 3: Se etter prosesser som bruker mange overvåkninger

Kjernen eksponerer inotify-overvåkingsinformasjon i hver prosess' /proc/<pid>/fdinfooppføringer. Dokumentasjonen proc_pid_fdinfo(5) oppgir at linjer som begynner med inotifybeskriver overvåkede filer eller mapper.

For en rask inspeksjon viser denne kommandoen inotify-linjer som tillatelsene dine tillater deg å lese:

sudo grep -H '^inotify' /proc/[0-9]*/fdinfo/* 2>/dev/null | head -n 50

For et mer nyttig estimat per prosess for din nåværende bruker, bruk:

uid=$(id -u)
for p in /proc/[0-9]*; do
  [ "$(awk '/^Uid:/{print $2}' "$p/status" 2>/dev/null)" = "$uid" ] || continue
  n=$(grep -h '^inotify' "$p"/fdinfo/* 2>/dev/null | wc -l)
  [ "$n" -gt 0 ] || continue
  printf '%s\t%s\t%s\n' "${p##*/}" "$n" \
    "$(tr '\0' ' ' < "$p/cmdline" 2>/dev/null | cut -c1-80)"
done | sort -k2,2nr | head

Behandle dette resultatet som et diagnostisk estimat snarere enn perfekt regnskapsføring, spesielt når filbeskrivelser deles. Hensikten er å avdekke åpenbare syndere som flere gamle utviklingsservere, dupliserte IDE-instanser eller flere overvåkere over det samme store depotet.

Eksempel på Linux-terminalliste: inotify-oppføringer fra process fdinfo-filer under proc-filsystemet.
Inspeksjon /proc/*/fdinfo/*kan avsløre hvilke prosesser som inneholder inotify-overvåkningsbeskrivelser. PID-ene og inode-verdiene som vises er illustrerende.

Trinn 4: Stopp foreldede overvåkere og prøv på nytt før du øker grensen

Hvis du finner utviklingsservere eller verktøy du ikke lenger trenger, må du først lukke dem på vanlig måte. Å starte en editor eller utviklerserver med mye overvåking på nytt kan også frigjøre overvåkinger som er etterlatt av en langvarig økt. Unngå en bred killallkommando med mindre du forstår nøyaktig hva den vil stoppe.

Etter at du har lukket de mistenkte prosessene, kjør den opprinnelige kommandoen på nytt. Hvis den nå fungerer, trenger du kanskje ikke en kjerneendring i det hele tatt. Gjentatt utmattelse tyder imidlertid på at arbeidsmengden reelt sett trenger flere overvåkinger, eller at verktøyet overvåker for mye.

Illustrativ Linux-terminal som viser en Vite-prosess som stoppes, og en utviklingsserver som starter opp etterpå.
Start bare den overvåkningstunge prosessen du kjenner igjen på nytt. pkillEksemplet er illustrerende; bruk ditt faktiske prosessnavn og foretrekk programmets normale avslutning når det er mulig.

Trinn 5: Test en høyere max_user_watches-verdi midlertidig

En runtime sysctl-endring er nyttig fordi du kan teste den før du gjør den permanent. Registrer først gjeldende verdi:

sysctl fs.inotify.max_user_watches

Velg deretter en verdi som er stor nok for den observerte arbeidsmengden. Hvis du for eksempel bevisst bestemmer deg for å teste 524 288 klokker:

sudo sysctl fs.inotify.max_user_watches=524288

Dette er en eksempelverdi, ikke en universell anbefaling . Inotify-grensene finnes for bundet kjerneressursforbruk, så det er ikke gratis å øke dem uten å forstå arbeidsmengden. En bedre tilnærming er å øke antallet målte trinn, prøve programmet på nytt og stoppe når du har rimelig kapasitet.

Linux-terminal som viser et eksempel på en midlertidig sysctl-endring som setter fs.inotify.max_user_watches til 524288 og leser verdien tilbake.
En sysctl-endring under kjøring lar deg teste et nytt overvåkningstak umiddelbart. Her er 524 288 bare et eksempel på en testverdi.

sysctl (8)-manualen dokumenterer lesing og endring av kjerneparametere under kjøring.

Trinn 6: Gjør den testede verdien permanent

Hvis den midlertidige endringen løser problemet og verdien er passende for maskinen din, lagrer du den i en sysctl-konfigurasjonsfil. På systemd-baserte distribusjoner kan en lokal administrator plassere konfigurasjonen i /etc/sysctl.d/*.conf. Systemd sysctl.d-dokumentasjonen forklarer at filer i /etc/sysctl.d/er ment for lokal administratorkonfigurasjon og behandles i filnavnrekkefølge.

Opprett en dedikert fil i stedet for å grave ned endringen blant urelaterte innstillinger:

sudo nano /etc/sysctl.d/99-inotify.conf

Legg til verdien du allerede har testet:

fs.inotify.max_user_watches=524288
Terminalteksteditor som viser et eksempel på en /etc/sysctl.d/99-inotify.conf-fil med fs.inotify.max_user_watches satt til 524288.
Lagre den testede watcher-innstillingen i en dedikert sysctl.d-konfigurasjonsfil. Erstatt eksempelnummeret med verdien du validerte for arbeidsmengden din.

Hvis systemet ditt ikke bruker systemds sysctl.d-flyt, bør du se i distribusjonens dokumentasjon før du velger en permanent konfigurasjonsplassering.

Trinn 7: Bruk den vedvarende konfigurasjonen og bekreft den

Du kan starte datamaskinen på nytt, men det er vanligvis unødvendig. På systemer med procps- sysctlverktøyet, bruk systemkonfigurasjonen med:

sudo sysctl --system

Bekreft deretter den aktive verdien:

sysctl fs.inotify.max_user_watches

Den aktive verdien skal samsvare med den tiltenkte innstillingen. Hvis den ikke gjør det, sjekk utdataene sysctl --systemfor en senere konfigurasjonsfil som overstyrer oppføringen din. Navnereglene for sysctl.d er viktige fordi senere filnavn kan prioriteres når den samme variabelen tilordnes mer enn én gang.

Linux-terminal som viser sudo sysctl --system som bruker 99-inotify.conf og deretter verifiserer fs.inotify.max_user_watches.
Bruk konfigurasjonen, og les deretter parameteren tilbake. Verifisering er mer pålitelig enn å anta at filen ble lastet inn.

Trinn 8: Start applikasjonen på nytt og reduser unødvendig overvåkningsomfang

Start programmet som opprinnelig feilet. Hvis det starter normalt, fungerer kjernesideløsningen. Ikke stopp der hvis overvåkingsbruken forblir uventet høy. Konfigurer programmet, der det støttes, til å ekskludere kataloger som ikke trenger live-overvåking, for eksempel generert byggeutdata, hurtigbuffere, store logger, leverandørtrær eller avhengighetskataloger.

Å redusere overvåkingsområdet er ofte den beste langsiktige løsningen fordi det reduserer kjerneressursbruken og reduserer behandling av filhendelser. Noen verktøy tilbyr polling som en reserve, men polling kan øke CPU- og I/O-aktivitet, så det er vanligvis bedre å behandle det som et kompatibilitetsalternativ snarere enn den første løsningen.

Illustrativ Linux-terminal som viser npm run dev som starter en Vite-server på localhost etter endringen av watcher-konfigurasjonen.
Siste sjekk: kjør den opprinnelige utviklingskommandoen på nytt og bekreft at den starter uten watcher-limit-feilen.

Hva om feilen fortsatt vises?

Sjekk om max_user_instances er den virkelige begrensningen

max_user_instancesbegrenser antall inotify-forekomster per reell bruker-ID. Feilmodusen er imidlertid annerledes: den nåværende inotify_init(2)-manualen dokumenterer EMFILEnår grensen for inotify-forekomst per bruker er nådd. Det betyr at den nøyaktige ENOSPC-overvåkingsmeldingen peker mer direkte på overvåkinger eller ressursallokering, ikke automatisk på forekomstgrensen.

Ikke grip etter ulimit -n først

ulimit -nstyrer prosessens grense for åpne filer. Filbeskrivelser er relatert til inotify-instanser, men én inotify-instans kan inneholde mange overvåkninger. Å øke grensen for åpne filer er derfor ikke den direkte løsningen for en inotify_add_watch()ENOSPC forårsaket av max_user_watches.

Containere kan kanskje ikke endre denne sysctl-en.

Docker dokumenterer at ikke alle sysctl-er har navneområde, og at de ikke støtter endring av container-sysctl-er som ville endre vertssystemet. Hvis den feilende arbeidsmengden kjører i Docker og fs.inotify.max_user_watcheskontrolleres av vertskjernen, må du gjøre endringen på riktig vert eller virtuell maskin i stedet for å tvinge den frem fra en ikke-privilegert container. Se Dockers runtime sysctl-dokumentasjon .

Vanlige feil å unngå

  • Forutsatt at ENOSPC alltid betyr en full disk. Systemkallet inotify bruker eksplisitt ENOSPC for overvåkingsgrense-/ressursfeil.
  • Endre max_queued_events i stedet for max_user_watches. Køgrensen styrer ventende hendelser, ikke hvor mange filsystemobjekter en bruker kan se.
  • Setter en enorm verdi uten å måle. Inotify-grenser finnes for å begrense kjerneressursbruken; øk den bevisst.
  • Gjør en permanent endring før du tester den. En midlertidig sysctlendring er enklere å validere og rulle tilbake.
  • Glemmer dupliserte overvåkingsprosesser. Flere redigeringsprogrammer, utviklingsservere eller synkroniseringsverktøy kan bruke den samme poolen per bruker.
  • Bruker sudo echo value > /proc/...og forventer at sudo skal dekke omdirigeringen. Skallet utfører >kjøringer sudo. Bruk sudo sysctl ...i stedet.

Rask diagnostisk sjekkliste

SpørsmålKommando eller handlingHva det forteller deg
Er dette overvåkerformen av ENOSPC?Les hele programfeilenSkiller utmattelse av overvåker fra diskplass på ENOSPC
Hva er seergrensen min?sysctl fs.inotify.max_user_watchesViser det aktive overvåkningstaket per bruker
Hvilke prosesser bruker Inotify?Undersøke/proc/<pid>/fdinfoHjelper med å finne foreldede eller overvåkningstunge prosesser
Kan jeg løse det uten å endre kjernen?Lukk dupliserte/foreldede overvåkingsprogrammer og prøv på nyttUtgir eksisterende klokker
Løser en høyere grense det?sudo sysctl fs.inotify.max_user_watches=VALUETester en kjøretidsverdi umiddelbart
Vil løsningen overleve omstart?Bruk /etc/sysctl.d/*.confog bekreftGjør en testet innstilling permanent

Primær dokumentasjon

Oppførselen som beskrives her kommer fra dokumentasjonen for brukergrensesnittet i Linux-kjernen, dokumentasjonen for proc-filsystemet, systemds sysctl.d-dokumentasjon og Dockers runtime-dokumentasjon. For de viktigste detaljene, se inotify(7) , inotify_add_watch(2) , proc_pid_fdinfo(5) og sysctl.d(5) .

Legg igjen en kommentar

Slik fikser du «ENOSPC: Systemgrense for filovervåkere nådd» i Linux

Slik fikser du «ENOSPC: Systemgrense for filovervåkere nådd» i Linux

Rett opp feil i Linux ENOSPC-filovervåking ved å sjekke inotify-grenser, finne prosesser som er tunge i overvåking, heve grenser på en sikker måte og gjøre endringer permanente.

How to Fix "Tailwind CSS Styles Not Updating" in a Vite React App

How to Fix "Tailwind CSS Styles Not Updating" in a Vite React App

Fix Tailwind CSS styles not updating in Vite React by checking Tailwind v4 setup, CSS imports, source detection, dynamic classes, HMR, and stale caches.

Slik fikser du ModuleNotFoundError: Ingen modul kalt 'pip' i Python 3

Slik fikser du ModuleNotFoundError: Ingen modul kalt 'pip' i Python 3

Fiks Python 3s ModuleNotFoundError for pip på Windows, macOS og Linux med ensurepip, OS-pakker, virtuelle miljøer og tolkekontroller.

Slik fikser du «Ingen tillatelse (offentlig nøkkel)» i GitHub SSH

Slik fikser du «Ingen tillatelse (offentlig nøkkel)» i GitHub SSH

Fiks GitHub SSH-tillatelse nektet (offentlig nøkkel) ved å sjekke verten, aktiv SSH-nøkkel, GitHub-konto, SSO-autorisasjon, ekstern URL og port 22-tilgang.

How to Fix “Git Push Rejected: Non-Fast-Forward” Without Losing Changes

How to Fix “Git Push Rejected: Non-Fast-Forward” Without Losing Changes

Fix a Git non-fast-forward push safely. Protect local work, fetch remote commits, choose merge or rebase, resolve conflicts, and push without losing changes.

Slik fikser du "Nginx 502 Bad Gateway" når du bruker proxy til Node.js

Slik fikser du "Nginx 502 Bad Gateway" når du bruker proxy til Node.js

Rett Nginx 502 Bad Gateway-feil med en Node.js-oppstrøm ved å sjekke appporten, NGINX-logger, proxy_pass-adresse, containernettverk, tidsavbrudd og omlasting.

Slik fikser du «Typen 'null' kan ikke tilordnes til type» i TypeScript

Slik fikser du «Typen 'null' kan ikke tilordnes til type» i TypeScript

Rett TypeScripts feilmelding «Typen 'null' kan ikke tilordnes til type» med unionstyper, innsnevring, standardverdier og sikre påstander under strictNullChecks.

Slik fikser du feilen «Prisma Client has not been generated yet»

Slik fikser du feilen «Prisma Client has not been generated yet»

Fiks feilen med at Prisma Client ikke er generert ved å sjekke generatoren, skjemaet, utdatastien, importene, versjonene, monorepo-oppsettet og byggetrinnene ved distribusjon.

Slik fikser du «ERR_MODULE_NOT_FOUND» i Node.js ESM-importer

Slik fikser du «ERR_MODULE_NOT_FOUND» i Node.js ESM-importer

Fiks Node.js ERR_MODULE_NOT_FOUND i ESM ved å sjekke importstier, filtyper, pakkeinstallasjon, eksport, ESM-modus og rene installasjoner.

Slik løser du SSL-sertifikatproblemet: Unable to Get Local Issuer Certificate i Git

Slik løser du SSL-sertifikatproblemet: Unable to Get Local Issuer Certificate i Git

Løs Git-feilmeldingen 'unable to get local issuer certificate' ved å identifisere tillitsbakgrunnen, installere riktig CA-kjede og beholde SSL-verifisering aktivert.