Sådan rettes "ENOSPC: Systemgrænse for filovervågning nået" i Linux

Hvis et Linux-udviklingsværktøj pludselig stopper med ENOSPC: System limit for number of file watchers reached, kan beskeden være misvisende. ENOSPClyder normalt som "ingen plads tilbage på enheden", men i denne specifikke sti betyder det ofte ikke , at din disk er fuld. Linux- inotify_add_watch()manualen siger, ENOSPCat kan returneres, når grænsen pr. bruger for inotify-overvågning er nået, eller når kernen ikke kan allokere en nødvendig ressource. Denne sondring er vigtig, fordi sletning af filer muligvis ikke gør noget for at løse problemet.

Denne guide gennemgår først diagnosen, derefter den mindst forstyrrende løsning og til sidst en vedvarende konfiguration. Kommandoerne gælder for Linux-systemer, der bruger kernens inotify- grænseflade, som lader applikationer overvåge filer og mapper for ændringer. Udviklingsservere, IDE'er, synkroniseringsklienter, testkørere og byggeværktøjer er ofte afhængige af den.

Dokumentationen til Linux man-pages blev kontrolleret den 13. september 2026. De vigtigste referencer er den aktuelle inotify_add_watch(2) manual og inotify(7) oversigt .

Hvad du har brug for, før du ændrer noget

Du skal bruge en terminal, og for at ændre kerneparametre, en konto, der kan bruge sudo. Gem ikke-gemt arbejde, før du stopper udviklingsservere eller editorer. Bemærk også, hvor den fejlende kommando kører: direkte på Linux, i en virtuel maskine, i WSL eller inde i en container. En container kan dele kerneindstillinger med sin vært og har muligvis ikke tilladelse til at ændre en sysctl på værtsniveau.

Start ikke med at kopiere en meget stor overvågningsgrænse fra et forumindlæg. Tjek først din nuværende indstilling, og identificer, om forældede eller duplikerede overvågningsprocesser bruger den.

Trin 1: Bekræft, at dette er inotify watcher-fejlen

Kør den kommando, der mislykkedes, og læs hele fejlen. Typiske udløsere inkluderer start af en JavaScript-udviklingsserver, en testkørsel til filovervågning eller et IDE-arbejdsområde, der indeholder et meget stort mappetræ. Den vigtige sætning er "systemgrænsen for antallet af filovervågningsprogrammer nået".

Illustrativ Linux-terminal, der viser en Vite-udviklingskommando, der slutter med en ENOSPC-systemgrænse for filovervågninger nået-fejl.
Eksempel på watcher-limit-fejl i en udviklingsterminal. Det viste projektnavn og den viste version er illustrative; dit værktøj og stakspor kan variere.

Hvis fejlen i stedet opstår ENOSPCunder skrivning af en fil, skal du kontrollere diskkapacitet og inode-tilgængelighed med kommandoer som f.eks. df -hog df -i. Denne artikel handler specifikt om inotify watcher-limit-formen af ​​ENOSPC.

Trin 2: Læs de nuværende inotify-grænser

Linux eksponerer inotify-begrænsninger under /proc/sys/fs/inotify/. En watch er et overvåget filsystemobjekt i en inotify-instans. Kerneldokumentationen skelner mellem tre kontroller:

  • max_user_watches: maksimalt antal overvågninger for ét rigtigt bruger-ID.
  • max_user_instances: maksimalt antal inotify-instanser for ét rigtigt bruger-ID.
  • max_queued_events: maksimalt antal hændelser i kø for en inotify-instans.

Tjek dem uden at ændre noget:

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

Du kan også aflæse den første værdi direkte:

cat /proc/sys/fs/inotify/max_user_watches
Linux-terminal, der viser eksempelværdier returneret for fs.inotify.max_user_watches og fs.inotify.max_user_instances.
Læs værdierne på din egen maskine i stedet for at antage en fast Linux-standard. Tallene vist her er eksempler, ikke anbefalede værdier.

Må ikke forveksles fs.inotify.max_user_watchesmed fs.epoll.max_user_watches. De er forskellige kernemekanismer. For denne fejl er du normalt interesseret i inotify-stien.

Trin 3: Led efter processer, der bruger mange overvågninger

Kernen eksponerer inotify-overvågningsoplysninger i hver process /proc/<pid>/fdinfoposter. Dokumentationen proc_pid_fdinfo(5) angiver, at linjer, der starter med , inotifybeskriver overvågede filer eller mapper.

For en hurtig inspektion viser denne kommando inotify-linjer, som dine tilladelser tillader dig at læse:

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

For et mere brugbart estimat pr. proces for din nuværende bruger, brug:

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

Behandl outputtet som et diagnostisk estimat snarere end en perfekt beregning, især når filbeskrivelser deles. Formålet er at afsløre åbenlyse syndere såsom flere gamle udviklingsservere, duplikerede IDE-instanser eller flere watchere over det samme store repository.

Eksempel på en liste over Linux-terminaler, der viser inotify-poster fra process fdinfo-filer under proc-filsystemet.
Inspektion /proc/*/fdinfo/*kan afsløre, hvilke processer der indeholder inotify watch-beskrivelser. De viste PID'er og inode-værdier er illustrative.

Trin 4: Stop forældede watchers og prøv igen, før du hæver grænsen

Hvis du finder udviklingsservere eller -værktøjer, du ikke længere har brug for, skal du først lukke dem normalt. Genstart af en editor eller udviklerserver med mange overvågere kan også frigive overvågninger efter en langvarig session. Undgå en bred killallkommando, medmindre du forstår præcis, hvad den vil stoppe.

Efter at have lukket de mistænkte processer, skal du køre din oprindelige kommando igen. Hvis den nu virker, behøver du muligvis slet ikke en kerneændring. Gentagen udmattelse tyder dog på, at arbejdsbyrden reelt har brug for flere overvågninger, eller at værktøjet overvåger for meget.

Illustrativ Linux-terminal, der viser en Vite-proces, der stoppes, og en udviklingsserver, der starter korrekt bagefter.
Genstart kun den proces, du genkender, der er meget overvågningsintensiv. pkillEksemplet er illustrativt; brug dit faktiske procesnavn, og foretræk programmets normale nedlukning, når det er muligt.

Trin 5: Test midlertidigt en højere max_user_watches-værdi

En runtime sysctl-ændring er nyttig, fordi du kan teste den, før du gør den persistent. Registrer først den aktuelle værdi:

sysctl fs.inotify.max_user_watches

Vælg derefter en værdi, der er stor nok til den observerede arbejdsbyrde. Hvis du for eksempel bevidst beslutter dig for at teste 524.288 ure:

sudo sysctl fs.inotify.max_user_watches=524288

Dette er en eksempelværdi, ikke en universel anbefaling . Inotify-grænserne findes for bundet kerne-ressourceforbrug, så det er ikke gratis at hæve dem uden at forstå arbejdsbyrden. En bedre tilgang er at øge antallet af målte trin, prøve programmet igen og stoppe, når du har rimelig plads.

Linux-terminal, der viser et eksempel på en midlertidig sysctl-ændring, der sætter fs.inotify.max_user_watches til 524288 og læser værdien tilbage.
En ændring af sysctl under kørsel giver dig mulighed for at teste et nyt watcher-loft med det samme. Her er 524.288 kun et eksempel på en testværdi.

sysctl (8)-manualen dokumenterer læsning og ændring af kerneparametre under kørsel.

Trin 6: Gør den testede værdi persistent

Hvis den midlertidige ændring løser problemet, og værdien er passende for din maskine, skal du gemme den i en sysctl-konfigurationsfil. På systemd-baserede distributioner kan en lokal administrator placere konfigurationen i /etc/sysctl.d/*.conf. Systemd sysctl.d-dokumentationen forklarer, at filer i /etc/sysctl.d/er beregnet til lokal administratorkonfiguration og behandles i filnavnrækkefølge.

Opret en dedikeret fil i stedet for at gemme ændringen blandt uafhængige indstillinger:

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

Tilføj den værdi, du allerede har testet:

fs.inotify.max_user_watches=524288
Terminalteksteditor, der viser et eksempel på en /etc/sysctl.d/99-inotify.conf-fil med fs.inotify.max_user_watches indstillet til 524288.
Gem den testede watcher-indstilling i en dedikeret sysctl.d-konfigurationsfil. Erstat eksempelnummeret med den værdi, du validerede for din arbejdsbelastning.

Hvis dit system ikke bruger systemds sysctl.d-flow, skal du konsultere din distributions dokumentation, før du vælger en permanent konfigurationsplacering.

Trin 7: Anvend den permanente konfiguration, og bekræft den

Du kan genstarte, men det er normalt unødvendigt. På systemer med procps- sysctlværktøjet skal du anvende systemkonfigurationen med:

sudo sysctl --system

Bekræft derefter den aktive værdi:

sysctl fs.inotify.max_user_watches

Den aktive værdi skal stemme overens med din tilsigtede indstilling. Hvis den ikke gør det, skal du kontrollere outputtet sysctl --systemfor en senere konfigurationsfil, der tilsidesætter din indtastning. Navngivningsreglerne for sysctl.d er vigtige, fordi senere filnavne kan have forrang, når den samme variabel tildeles mere end én gang.

Linux-terminal viser sudo sysctl --system, der anvender 99-inotify.conf og derefter verificerer fs.inotify.max_user_watches.
Anvend konfigurationen, og læs derefter parameteren tilbage. Bekræftelse er mere pålidelig end at antage, at filen blev indlæst.

Trin 8: Genstart applikationen og reducer unødvendigt overvågningsområde

Start den applikation, der oprindeligt fejlede. Hvis den starter normalt, virker kernesideløsningen. Stop ikke der, hvis overvågningsforbruget forbliver uventet højt. Konfigurer applikationen, hvor det understøttes, til at ekskludere mapper, der ikke kræver liveovervågning, såsom genereret build-output, cacher, store logfiler, leverandørtræer eller afhængighedsmapper.

At reducere overvågningsomfanget er ofte den bedste langsigtede løsning, fordi det sænker brugen af ​​kerneressourcer og reducerer filhændelsesbehandling. Nogle værktøjer tilbyder polling som en fallback, men polling kan øge CPU- og I/O-aktivitet, så det er normalt bedre at behandle det som en kompatibilitetsmulighed end den første løsning.

Illustrativ Linux-terminal, der viser npm run dev, der starter en Vite-server med succes på localhost efter ændringen af ​​watcher-konfigurationen.
Sidste kontrol: Kør den oprindelige udviklingskommando igen, og bekræft, at den starter uden watcher-limit-fejlen.

Hvad hvis fejlen stadig vises?

Tjek om max_user_instances er den reelle begrænsning

max_user_instancesbegrænser antallet af inotify-instanser pr. reelt bruger-ID. Fejltilstanden er dog anderledes: den nuværende inotify_init(2)-manual dokumenterer, EMFILEhvornår grænsen for inotify-instanser pr. bruger er nået. Det betyder, at den nøjagtige ENOSPC-overvågningsmeddelelse mere direkte peger på overvågninger eller ressourceallokering, ikke automatisk på instansgrænsen.

Ræk ikke ud efter ulimit -n først

ulimit -nstyrer processens grænse for åbne filbeskrivelser. Filbeskrivelser er relateret til inotify-instanser, men én inotify-instans kan indeholde mange overvågninger. At hæve grænsen for åbne filer er derfor ikke den direkte løsning på en inotify_add_watch()ENOSPC forårsaget af max_user_watches.

Containere kan muligvis ikke ændre denne sysctl

Docker dokumenterer, at ikke alle sysctl'er har navnespace, og at de ikke understøtter ændring af container-sysctl'er, der ville ændre værtssystemet. Hvis den fejlende arbejdsbelastning kører i Docker og fs.inotify.max_user_watchesstyres af værtskernen, skal du foretage ændringen på den relevante vært eller VM i stedet for at tvinge den fra en ikke-privilegeret container. Se Dockers runtime sysctl-dokumentation .

Almindelige fejl at undgå

  • Hvis vi antager, at ENOSPC altid betyder en fuld disk, bruger inotify-systemkaldet eksplicit ENOSPC til watch-limit/ressourcefejl.
  • Ændring af max_queued_events i stedet for max_user_watches. Køgrænsen styrer ventende hændelser, ikke hvor mange filsystemobjekter en bruger må overvåge.
  • Sætter en enorm værdi uden at måle. Inotify har grænser for at begrænse kerneressourceforbruget; øg det bevidst.
  • Foretager en permanent ændring, før den testes. En midlertidig sysctlændring er nemmere at validere og rulle tilbage.
  • Glemmer dubletter af watcherprocesser. Flere editorer, udviklingsservere eller synkroniseringsværktøjer kan bruge den samme pulje pr. bruger.
  • Bruger sudo echo value > /proc/...og forventer at sudo dækker omdirigeringen. Shell'en udfører kørsel >før sudokørsel. Brug sudo sysctl ...i stedet.

Hurtig diagnostisk tjekliste

SpørgsmålKommando eller handlingHvad det fortæller dig
Er dette ENOSPC's iagttagerform?Læs hele programfejlenAdskiller watcher-udmattelse fra diskplads ENOSPC
Hvad er min grænse for antal seere?sysctl fs.inotify.max_user_watchesViser det aktive overvågningsloft pr. bruger
Hvilke processer bruger Inotify?Inspicere/proc/<pid>/fdinfoHjælper med at finde forældede eller overvågetunge processer
Kan jeg løse det uden at ændre kernen?Luk dubletter/forældede overvågere og prøv igenUdgiver eksisterende ure
Løser en højere grænse det?sudo sysctl fs.inotify.max_user_watches=VALUETester en runtime-værdi med det samme
Vil rettelsen overleve genstart?Brug /etc/sysctl.d/*.confog verificérGør en testet indstilling permanent

Primær dokumentation

Den adfærd, der beskrives her, stammer fra dokumentationen til Linux-kernens brugergrænseflade, dokumentationen til proc-filsystemet, systemds sysctl.d-dokumentation og Dockers runtime-dokumentation. For de vigtigste detaljer, se inotify(7) , inotify_add_watch(2) , proc_pid_fdinfo(5) og sysctl.d(5) .

Efterlad en kommentar

Sådan rettes "ENOSPC: Systemgrænse for filovervågning nået" i Linux

Sådan rettes "ENOSPC: Systemgrænse for filovervågning nået" i Linux

Ret fejl i Linux ENOSPC-filovervågning ved at kontrollere inotify-grænser, finde processer med mange overvågningsbehov, hæve grænser sikkert og gøre ændringer permanente.

Sådan rettes "Tailwind CSS-stilarter opdateres ikke" i en Vite React-app

Sådan rettes "Tailwind CSS-stilarter opdateres ikke" i en Vite React-app

Ret problemer med Tailwind CSS-stilarter, der ikke opdateres i Vite React, ved at kontrollere Tailwind v4-opsætning, CSS-import, kildekodedetektion, dynamiske klasser, HMR og forældede cacher.

Sådan rettes ModuleNotFoundError: Intet modul med navnet 'pip' i Python 3

Sådan rettes ModuleNotFoundError: Intet modul med navnet 'pip' i Python 3

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

Sådan rettes "Tilladelse nægtet (offentlig nøgle)" i GitHub SSH

Sådan rettes "Tilladelse nægtet (offentlig nøgle)" i GitHub SSH

Ret GitHub SSH-tilladelse nægtet (publickey) ved at kontrollere værten, den aktive SSH-nøgle, GitHub-kontoen, SSO-godkendelsen, den eksterne URL og port 22-adgang.

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.

Sådan rettes "Nginx 502 Bad Gateway" ved proxy til Node.js

Sådan rettes "Nginx 502 Bad Gateway" ved proxy til Node.js

Ret Nginx 502 Bad Gateway-fejl med en Node.js upstream ved at kontrollere app-porten, NGINX-logfiler, proxy_pass-adresse, containernetværk, timeouts og genindlæsning.

Sådan rettes "Type 'null' kan ikke tildeles til type" i TypeScript

Sådan rettes "Type 'null' kan ikke tildeles til type" i TypeScript

Retter TypeScripts fejl "Type 'null' kan ikke tildeles til type" med foreningstyper, indsnævring, standardværdier og sikre påstande under strictNullChecks.

Sådan retter du fejlen "Prisma Client Has Not Been Generated Yet"

Sådan retter du fejlen "Prisma Client Has Not Been Generated Yet"

Ret fejlen med Prisma Client, der ikke er genereret, ved at kontrollere din generator, schema, output-sti, imports, versioner, monorepo-opsætning og build-trin til deployment.

Sådan rettes "ERR_MODULE_NOT_FOUND" i Node.js ESM-importer

Sådan rettes "ERR_MODULE_NOT_FOUND" i Node.js ESM-importer

Ret Node.js ERR_MODULE_NOT_FOUND i ESM ved at kontrollere importstier, filtypenavne, pakkeinstallation, eksport, ESM-tilstand og rene installationer.

Sådan løser du SSL-certifikatproblemet: Unable to get local issuer certificate i Git

Sådan løser du SSL-certifikatproblemet: Unable to get local issuer certificate i Git

Løs Git-fejlen 'unable to get local issuer certificate' ved at identificere tillidsbackenden, installere den korrekte CA-kæde og holde SSL-verifikation aktiveret.