Kuinka korjata "ENOSPC: Järjestelmän raja tiedostojen tarkkailijoille saavutettu" Linuxissa

Jos Linux-kehitystyökalu pysähtyy yhtäkkiä ja näyttää virheen ENOSPC: System limit for number of file watchers reached, viesti voi olla harhaanjohtava. ENOSPCYleensä se näyttää "laitteella ei ole tilaa jäljellä", mutta tässä tietyssä polussa se ei usein tarkoita, että levy on täynnä. Linuxin inotify_add_watch()käyttöohjeen mukaan ENOSPCse voidaan palauttaa, kun inotify-katselujen käyttäjäkohtainen raja on saavutettu tai kun ydin ei pysty varaamaan tarvittavaa resurssia. Tällä erolla on merkitystä, koska tiedostojen poistaminen ei välttämättä ratkaise ongelmaa mitenkään.

Tämä opas käy ensin läpi vianmäärityksen, sitten vähiten häiritsevän korjauksen ja lopuksi pysyvän kokoonpanon. Komennot koskevat Linux-järjestelmiä, jotka käyttävät ytimen inotify- käyttöliittymää, jonka avulla sovellukset voivat valvoa tiedostojen ja hakemistojen muutoksia. Kehityspalvelimet, IDE:t, synkronointiasiakkaat, testiajoohjelmat ja käännöstyökalut ovat usein riippuvaisia ​​siitä.

Linuxin man-sivujen dokumentaatio tarkastettiin 13. syyskuuta 2026. Tärkeimmät viitteet ovat nykyinen inotify_add_watch(2)-manuaali ja inotify(7)-yleiskatsaus .

Mitä tarvitset ennen kuin muutat mitään

Tarvitset pääteohjelman ja ytimen parametrien muuttamista varten tilin, joka voi käyttää sudo. Tallenna tallentamaton työ ennen kehityspalvelimien tai editorien pysäyttämistä. Huomaa myös, missä epäonnistunut komento suoritetaan: suoraan Linuxissa, virtuaalikoneessa, WSL:ssä vai säilön sisällä. Säiliö saattaa jakaa ytimen asetuksia isäntänsä kanssa, eikä sillä välttämättä ole oikeutta muuttaa isäntätason sysctl-komentoa.

Älä aloita kopioimalla erittäin suurta tarkkailijarajoitusta foorumiviestistä. Tarkista ensin nykyinen asetuksesi ja selvitä, käyttävätkö vanhentuneet tai kahdentuneet tarkkailijaprosessit sitä.

Vaihe 1: Vahvista, että tämä on inotify-valvontavirhe

Suorita epäonnistunut komento ja lue koko virhe. Tyypillisiä laukaisimia ovat JavaScript-kehityspalvelimen käynnistys, tiedostojen tarkkailua suorittava testiohjelma tai IDE-työtila, joka sisältää erittäin suuren hakemistopuun. Tärkeä lause on "tiedostojen tarkkailijoiden määrän järjestelmäraja saavutettu".

Havainnollistava Linux-pääte, jossa näkyy Vite-kehityskomento, joka päättyy ENOSPC-järjestelmärajoituksen saavuttamiseen tiedostojen tarkkailijoille.
Esimerkki watcher-limit-virheestä kehityspäätteessä. Projektin nimi ja versio ovat havainnollistavia; työkalusi ja pinon jäljitys voivat erota toisistaan.

Jos virhe ilmenee ENOSPCtiedoston kirjoittamisen aikana, tarkista levyn kapasiteetti ja inode-komennon saatavuus komennoilla, kuten df -hja df -i. Tämä artikkeli käsittelee erityisesti ENOSPC:n inotify watcher-limit -muotoa.

Vaihe 2: Lue nykyiset inotify-rajoitukset

Linux paljastaa inotify-rajoitukset kohdassa /proc/sys/fs/inotify/. Watch on yksi valvottu tiedostojärjestelmäobjekti inotify-instanssin sisällä. Ytimen dokumentaatiossa erotetaan toisistaan ​​kolme ohjausobjektia:

  • max_user_watches: yhden oikean käyttäjätunnuksen katselukertojen enimmäismäärä.
  • max_user_instances: inotify-instanssien enimmäismäärä yhtä oikeaa käyttäjätunnusta kohden.
  • max_queued_events: inotify-instanssin jonossa olevien tapahtumien enimmäismäärä.

Tarkista ne muuttamatta mitään:

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

Voit myös lukea ensimmäisen arvon suoraan:

cat /proc/sys/fs/inotify/max_user_watches
Linux-pääte, joka näyttää esimerkkiarvoja fs.inotify.max_user_watches- ja fs.inotify.max_user_instances-funktioille.
Lue arvot omalta koneeltasi sen sijaan, että olettaisit kiinteän Linux-oletusarvon. Tässä näkyvät luvut ovat esimerkkejä, eivät suositeltuja arvoja.

Älä sekoita fs.inotify.max_user_watches. fs.epoll.max_user_watchesNe ovat eri ytimen mekanismeja. Tässä virheessä välität yleensä inotify-polusta.

Vaihe 3: Etsi prosesseja, jotka kuluttavat useita seurantajaksoja

Ydin näyttää inotify-valvontatiedot jokaisen prosessin /proc/<pid>/fdinfomerkinnöissä. Proc_pid_fdinfo(5):n dokumentaatiossa todetaan, että merkkijonoilla alkavat rivit inotifykuvaavat valvottuja tiedostoja tai hakemistoja.

Nopeaa tarkistusta varten tämä komento näyttää inotify-rivit, jotka käyttöoikeutesi sallivat sinun lukea:

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

Saat hyödyllisemmän prosessikohtaisen arvion nykyiselle käyttäjällesi käyttämällä:

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

Käsittele tätä tulostetta diagnostisena arviona täydellisen kirjanpidon sijaan, varsinkin kun tiedostokuvauksia jaetaan. Sen tarkoituksena on paljastaa ilmeisiä rikollisia, kuten useita vanhoja kehityspalvelimia, kaksoiskappaleita IDE-instansseja tai useita tarkkailijoita samassa suuressa arkistossa.

Esimerkki Linux-päätelaitteen inotify-merkinnöistä prosessien fdinfo-tiedostoista proc-tiedostojärjestelmässä.
Tarkastaminen /proc/*/fdinfo/*voi paljastaa, mitkä prosessit sisältävät inotify-valvontakuvauksia. Esitetyt PID:t ja inode-arvot ovat havainnollistavia.

Vaihe 4: Pysäytä vanhentuneet tarkkailijat ja yritä uudelleen ennen rajan nostamista

Jos löydät kehityspalvelimia tai -työkaluja, joita et enää tarvitse, sulje ne ensin normaalisti. Myös paljon tarkkailuohjelmia käyttävän editorin tai kehityspalvelimen uudelleenkäynnistäminen voi vapauttaa pitkään jatkuneen istunnon jättämiä tarkkailuja. Vältä laajaa killallkomentoa, ellet ymmärrä tarkalleen, mitä se pysäyttää.

Sulje epäillyt prosessit ja suorita alkuperäinen komento uudelleen. Jos se nyt toimii, et ehkä tarvitse ytimen vaihtoa ollenkaan. Toistuva ylikuormitus kuitenkin viittaa siihen, että työmäärä todella tarvitsee lisää tarkkailuja tai että työkalu tarkkailee liikaa.

Havainnollistava Linux-pääte, joka näyttää Vite-prosessin pysäyttämisen ja kehityspalvelimen käynnistymisen onnistuneesti sen jälkeen.
Käynnistä uudelleen vain tunnistamasi paljon tarkkailijoita sisältävä prosessi. Esimerkki pkillon havainnollistava; käytä todellista prosessinimeäsi ja suosi sovelluksen normaalia sammutusta aina kun mahdollista.

Vaihe 5: Testaa korkeampaa max_user_watches-arvoa väliaikaisesti

Ajonaikainen sysctl-muutos on hyödyllinen, koska voit testata sen ennen kuin teet siitä pysyvän. Kirjaa ensin nykyinen arvo:

sysctl fs.inotify.max_user_watches

Valitse sitten arvo, joka on riittävän suuri havaitulle työmäärälle. Jos esimerkiksi päätät testata 524 288 kelloa:

sudo sysctl fs.inotify.max_user_watches=524288

Tämä on esimerkkiarvo, ei yleismaailmallinen suositus . Inotify-rajoitukset koskevat sidottua ytimen resurssien kulutusta, joten niiden nostaminen ilman työmäärän ymmärtämistä ei ole ilmaista. Parempi lähestymistapa on lisätä arvoa mitatuissa vaiheissa, yrittää sovellusta uudelleen ja lopettaa, kun sinulla on riittävästi resursseja.

Linux-pääte, jossa näkyy esimerkki väliaikaisesta sysctl-muutoksesta, joka asettaa fs.inotify.max_user_watches-arvoksi 524288 ja lukee arvon takaisin.
Ajonaikainen sysctl-muutos antaa sinun testata uutta tarkkailijan enimmäismäärää välittömästi. Tässä 524 288 on vain esimerkki testiarvosta.

sysctl (8)-käyttöohjeessa käsitellään ytimen parametrien lukemista ja muuttamista ajonaikana.

Vaihe 6: Tee testatusta arvosta pysyvä

Jos väliaikainen muutos korjaa ongelman ja arvo sopii koneellesi, tallenna se sysctl-määritystiedostoon. Systemd-pohjaisissa jakeluissa paikallinen järjestelmänvalvoja voi tallentaa määritykset kansioon /etc/sysctl.d/*.conf. systemd:n ​​sysctl.d-tiedoston dokumentaatiossa selitetään, että tiedostot kannassa /etc/sysctl.d/on tarkoitettu paikallisen järjestelmänvalvojan määrityksiin ja ne käsitellään tiedostonimijärjestyksessä.

Luo erillinen tiedosto sen sijaan, että hautaisit muutoksen toisiinsa liittymättömien asetusten joukkoon:

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

Lisää jo testaamasi arvo:

fs.inotify.max_user_watches=524288
Päätetekstieditori, jossa näkyy esimerkki tiedostosta /etc/sysctl.d/99-inotify.conf, jonka fs.inotify.max_user_watches on asetettu arvoon 524288.
Tallenna testatun tarkkailijan asetus erilliseen sysctl.d-määritystiedostoon. Korvaa esimerkkinumero työkuormallesi vahvistamallasi arvolla.

Jos järjestelmäsi ei käytä systemd:n ​​sysctl.d-työnkulkua, tutustu jakelusi dokumentaatioon ennen pysyvän määrityssijainnin valitsemista.

Vaihe 7: Käytä pysyvää kokoonpanoa ja tarkista se

Voit käynnistää järjestelmän uudelleen, mutta se on yleensä tarpeetonta. Järjestelmissä, joissa on procps- sysctltyökalu, määritä järjestelmän asetukset seuraavasti:

sudo sysctl --system

Tarkista sitten aktiivinen arvo:

sysctl fs.inotify.max_user_watches

Aktiivisen arvon tulisi vastata haluamaasi asetusta. Jos se ei vastaa, tarkista funktion tulosteesta sysctl --systemmyöhempi määritystiedosto, joka korvaa syötteesi. sysctl.d-tiedoston nimeämissäännöt ovat tärkeitä, koska myöhemmät tiedostonimet voivat olla etusijalla, kun sama muuttuja määritetään useammin kuin kerran.

Linux-pääte, jossa näkyy sudo sysctl --system -komento, joka soveltaa tiedostoa 99-inotify.conf ja tarkistaa sitten tiedostoa fs.inotify.max_user_watches.
Käytä asetuksia ja lue sitten parametri takaisin. Vahvistus on luotettavampi kuin oletus, että tiedosto on ladattu.

Vaihe 8: Käynnistä sovellus uudelleen ja vähennä tarpeetonta tarkkailun laajuutta

Käynnistä sovellus, joka alun perin epäonnistui. Jos se käynnistyy normaalisti, kernel-puolen korjaus toimii. Älä pysähdy tähän, jos valvontatoimintojen käyttö pysyy odottamattoman korkeana. Määritä sovellus, jos se on tuettu, jättämään pois hakemistot, jotka eivät tarvitse reaaliaikaista valvontaa, kuten luodut koontitulosteet, välimuistit, suuret lokit, toimittajapuut tai riippuvuushakemistot.

Tarkkailualueen pienentäminen on usein paras pitkän aikavälin ratkaisu, koska se vähentää ytimen resurssien käyttöä ja tiedostotapahtumien käsittelyä. Jotkin työkalut tarjoavat kyselyn vararatkaisuna, mutta kysely voi lisätä suorittimen ja I/O:n aktiivisuutta, joten sitä on yleensä parempi käsitellä yhteensopivuusvaihtoehtona kuin ensisijaisena ratkaisuna.

Havainnollistava Linux-pääte, jossa näkyy npm run dev -komento, joka käynnistää Vite-palvelimen onnistuneesti paikallisessa koneessa tarkkailijan kokoonpanon muutoksen jälkeen.
Viimeinen tarkistus: suorita alkuperäinen kehityskomento uudelleen ja varmista, että se käynnistyy ilman watcher-limit-virhettä.

Mitä jos virhe näkyy edelleen?

Tarkista, onko max_user_instances todellinen rajoite

max_user_instancesrajoittaa inotify-instanssien määrää todellista käyttäjätunnusta kohden. Virhetila on kuitenkin erilainen: nykyinen inotify_init(2)-manuaali dokumentoi, EMFILEmilloin käyttäjäkohtainen inotify-instanssien raja saavutetaan. Tämä tarkoittaa, että tarkka ENOSPC-tarkkailijaviesti viittaa suoremmin tarkkailuihin tai resurssien allokointiin, ei automaattisesti instanssien rajaan.

Älä käytä komentoa ulimit -n ensin

ulimit -nhallitsee prosessin avoimen tiedoston kuvaajien rajaa. Tiedostokuvaajat liittyvät inotify-instansseihin, mutta yksi inotify-instanssi voi sisältää useita tarkkailuja. Avoimen tiedoston rajan nostaminen ei siis ole suora ratkaisu .:n inotify_add_watch()aiheuttamaan ENOSPC-ongelmaan max_user_watches.

Säiliöt eivät välttämättä pysty muuttamaan tätä sysctl-arvoa.

Docker dokumentoi, että kaikki sysctl-käskyt eivät ole nimiavaruuden mukaisia ​​eikä se tue säilön sysctl-käskyjen muuttamista siten, että se muuttaisi isäntäjärjestelmää. Jos virheellinen työkuorma suoritetaan Dockerissa ja fs.inotify.max_user_watchessitä ohjaa isäntäydin, tee muutos asianmukaisessa isännässä tai virtuaalikoneessa sen sijaan, että pakottaisit sen etuoikeuttamattomasta säilöstä. Katso Dockerin ajonaikaisen sysctl-dokumentaatio .

Yleisiä virheitä, joita kannattaa välttää

  • Olettaen, että ENOSPC tarkoittaa aina täyttä levyä. Inotify-järjestelmäkutsu käyttää eksplisiittisesti ENOSPC:tä valvontarajoitusten/resurssien virheiden varalta.
  • Muutetaan max_queued_events-arvoa max_user_watches-arvon sijaan. Jonon raja-arvo ohjaa odottavia tapahtumia, ei sitä, kuinka monta tiedostojärjestelmäobjektia käyttäjä voi tarkkailla.
  • Valtavan arvon asettaminen mittaamatta. Ytimen resurssien käyttöä rajoittavat Inotify-rajoitukset; nosta niitä tarkoituksella.
  • Pysyvän muutoksen tekeminen ennen sen testaamista. Väliaikainen sysctlmuutos on helpompi validoida ja peruuttaa.
  • Unohdataan päällekkäiset tarkkailuprosessit. Useat editorit, kehityspalvelimet tai synkronointityökalut voivat käyttää samaa käyttäjäkohtaista poolia.
  • Käytetään sudo echo value > /proc/...ja odotetaan sudo-komentoa uudelleenohjauksen kattamiseksi. Komentotulkki suoritetaan >ennen sudosuorituksia. Käytä sudo sysctl ...sen sijaan.

Nopea diagnostiikkatarkistuslista

KysymysKomento tai toimintoMitä se kertoo sinulle
Onko tämä ENOSPC:n tarkkailijamuoto?Lue koko hakemusvirheErottaa tarkkailijan uupumuksen levytilan käytöstä ENOSPC:ssä
Mikä on tarkkailijamääräni raja?sysctl fs.inotify.max_user_watchesNäyttää aktiivisten katselukertojen ylärajan käyttäjää kohden
Mitkä prosessit käyttävät inotify-ohjelmaa?Tarkastaa/proc/<pid>/fdinfoAuttaa löytämään vanhentuneita tai paljon tarkkailijoita käyttäviä prosesseja
Voinko ratkaista sen ilman kernelin vaihtoa?Sulje päällekkäiset/vanhentuneet tarkkailijat ja yritä uudelleenJulkaisee olemassa olevia kelloja
Korjaako korkeampi raja sen?sudo sysctl fs.inotify.max_user_watches=VALUETestaa ajonaikaisen arvon välittömästi
Selviääkö korjaus uudelleenkäynnistyksen jälkeen?Käytä /etc/sysctl.d/*.confja varmistaTekee testatusta asetuksesta pysyvän

Ensisijainen dokumentaatio

Tässä kuvattu toimintatapa on peräisin Linux-ytimen käyttäjätilan käyttöliittymän dokumentaatiosta, proc-tiedostojärjestelmän dokumentaatiosta, systemd:n ​​sysctl.d-dokumentaatiosta ja Dockerin ajonaikaisen dokumentaation. Tärkeimmät yksityiskohdat löytyvät inotify(7) , inotify_add_watch(2) , proc_pid_fdinfo(5) ja sysctl.d(5) -tiedostoista .

Jätä kommentti

Kuinka korjata "ENOSPC: Järjestelmän raja tiedostojen tarkkailijoille saavutettu" Linuxissa

Kuinka korjata "ENOSPC: Järjestelmän raja tiedostojen tarkkailijoille saavutettu" Linuxissa

Korjaa Linux ENOSPC -tiedostojen tarkkailijan virheet tarkistamalla inotify-rajoitukset, etsimällä tarkkailijapainotteisia prosesseja, nostamalla rajoituksia turvallisesti ja tekemällä muutoksista pysyviä.

Kuinka korjata "Tailwind CSS Styles Not Update" -ongelma Vite React -sovelluksessa

Kuinka korjata "Tailwind CSS Styles Not Update" -ongelma Vite React -sovelluksessa

Korjaa Tailwind CSS -tyylien päivittymättömyys Vite Reactissa tarkistamalla Tailwind v4 -asetukset, CSS-tuonnit, lähteen tunnistus, dynaamiset luokat, HMR ja vanhentuneet välimuistit.

Kuinka korjata ModuleNotFoundError: Ei moduulia nimeltä 'pip' Python 3:ssa

Kuinka korjata ModuleNotFoundError: Ei moduulia nimeltä 'pip' Python 3:ssa

Korjaa Python 3:n ModuleNotFoundError-virhe pip-funktiolle Windowsissa, macOS:ssä ja Linuxissa ensurepip-komennolla, käyttöjärjestelmäpaketeilla, virtuaaliympäristöillä ja tulkkitarkistuksilla.

Kuinka korjata "Käyttöoikeus evätty (julkinen avain)" GitHub SSH:ssa

Kuinka korjata "Käyttöoikeus evätty (julkinen avain)" GitHub SSH:ssa

Korjaa GitHub SSH -käyttöoikeus evätty (julkinen avain) -ongelma tarkistamalla isäntä, aktiivinen SSH-avain, GitHub-tili, kertakirjautumisen valtuutus, etä-URL-osoite ja portin 22 käyttöoikeus.

Kuinka korjata "Git Push Rejected: Non-Fast-Forward" menettämättä muutoksia

Kuinka korjata "Git Push Rejected: Non-Fast-Forward" menettämättä muutoksia

Korjaa Gitin ei-pikakelausvirhe turvallisesti. Suojaa paikallinen työ, nouda etäcommitit, valitse yhdistäminen tai uudelleenpohjustaminen, ratkaise ristiriidat ja puske muutosten menettämättä.

Kuinka korjata "Nginx 502 Bad Gateway" -virhe, kun välityspalvelimena käytetään Node.js:ää

Kuinka korjata "Nginx 502 Bad Gateway" -virhe, kun välityspalvelimena käytetään Node.js:ää

Korjaa Nginx 502 Bad Gateway -virheet Node.js:n avulla ylävirran puolella tarkistamalla sovellusportti, NGINX-lokit, proxy_pass-osoite, säilöverkko, aikakatkaisut ja uudelleenlataus.

Kuinka korjata "Type 'null' ei ole määritettävissä tyypille" TypeScriptissä

Kuinka korjata "Type 'null' ei ole määritettävissä tyypille" TypeScriptissä

Korjaa TypeScriptin virhe ”Type 'null' ei ole määritettävissä tyypille” yhdistämistyypeillä, rajaamisella, oletusarvoilla ja turvallisilla väitteillä strictNullChecksin avulla.

Kuinka korjata "Prisma Client has not been generated yet" -virhe

Kuinka korjata "Prisma Client has not been generated yet" -virhe

Korjaa Prisma Clientin luontivirhe tarkistamalla generaattori, skeema, tulostepolku, importit, versiot, monorepo-asetukset ja käyttöönoton build-vaiheet.

Kuinka korjata "ERR_MODULE_NOT_FOUND" Node.js ESM -tuonneissa

Kuinka korjata "ERR_MODULE_NOT_FOUND" Node.js ESM -tuonneissa

Korjaa Node.js ERR_MODULE_NOT_FOUND ESM:ssä tarkistamalla tuontipolut, tiedostopäätteet, pakettien asennuksen, viennit, ESM-tilan ja puhtaat asennukset.

Kuinka korjata SSL-varmenneongelma: Paikallisen myöntäjän varmenteen haku epäonnistui Gitissä

Kuinka korjata SSL-varmenneongelma: Paikallisen myöntäjän varmenteen haku epäonnistui Gitissä

Korjaa Gitin virhe "paikallisen myöntäjän varmenteen haku epäonnistui" tunnistamalla luottamuksen taustajärjestelmä, asentamalla oikea CA-ketju ja pitämällä SSL-varmenteiden tarkistus päällä.