Kā novērst kļūdu "ENOSPC: sasniegts failu vērotāju sistēmas ierobežojums" operētājsistēmā Linux

Ja Linux izstrādes rīks pēkšņi apstājas ar ENOSPC: System limit for number of file watchers reached, ziņojums var būt maldinošs. ENOSPCParasti tas skan kā “ierīcē vairs nav vietas”, taču šajā konkrētajā ceļā tas bieži vien nenozīmē, ka disks ir pilns. Linux inotify_add_watch()rokasgrāmatā teikts, ka ENOSPCto var atgriezt, ja ir sasniegts inotify vērojumu ierobežojums vienam lietotājam vai ja kodols nevar piešķirt nepieciešamo resursu. Šī atšķirība ir svarīga, jo failu dzēšana, iespējams, neko nedarīs, lai atrisinātu problēmu.

Šajā rokasgrāmatā vispirms ir aprakstīta diagnostika, pēc tam vismazāk traucējošais risinājums un visbeidzot pastāvīga konfigurācija. Komandas attiecas uz Linux sistēmām, kas izmanto kodola inotify saskarni, kas ļauj lietojumprogrammām uzraudzīt failu un direktoriju izmaiņas. Izstrādes serveri, IDE, sinhronizācijas klienti, testēšanas programmas un veidošanas rīki bieži vien to izmanto.

Linux rokasgrāmatas lapu dokumentācija tika pārbaudīta 2026. gada 13. septembrī. Galvenās atsauces ir pašreizējā inotify_add_watch(2) rokasgrāmata un inotify(7) pārskats .

Kas jums nepieciešams pirms jebkādu izmaiņu veikšanas

Jums ir nepieciešams terminālis un, lai mainītu kodola parametrus, konts, kas var izmantot sudo. Pirms izstrādes serveru vai redaktoru apturēšanas saglabājiet nesaglabāto darbu. Ņemiet vērā arī to, kur darbojas kļūdainā komanda: tieši Linux sistēmā, virtuālajā mašīnā, WSL vai konteinera iekšpusē. Konteiners var koplietot kodola iestatījumus ar savu resursdatoru un, iespējams, nedrīkst mainīt resursdatora līmeņa sysctl.

Nesāciet, kopējot ļoti lielu vērotāju ierobežojumu no foruma ieraksta. Vispirms pārbaudiet pašreizējo iestatījumu un nosakiet, vai to nepatērē novecojuši vai dublēti vērotāju procesi.

1. darbība. Apstipriniet, ka šī ir inotify watcher kļūda.

Palaidiet komandu, kuras darbība neizdevās, un izlasiet visu kļūdas ziņojumu. Tipiski izraisītāji ir JavaScript izstrādes servera palaišana, failu vērošanas testa skrējējs vai IDE darbvieta, kurā ir ļoti liels direktoriju koks. Svarīgākā frāze ir "sasniegts sistēmas ierobežojums failu vērotāju skaitam".

Ilustratīvs Linux terminālis, kurā redzams Vite izstrādes komandas fragments, kas beidzas ar kļūdu "ENOSPC sistēmas ierobežojums failu vērotājiem" (ENOSPC system limit for file watchers completed).
Vērotāja ierobežojuma kļūmes piemērs izstrādes terminālī. Redzamais projekta nosaukums un versija ir ilustratīvi; jūsu rīks un steka trase var atšķirties.

Ja kļūda rodas ENOSPCfaila ierakstīšanas laikā, pārbaudiet diska ietilpību un inoda pieejamību, izmantojot tādas komandas kā df -hun df -i. Šis raksts ir īpaši par ENOSPC inotify watcher-limit formu.

2. darbība. Izlasiet pašreizējos inotify ierobežojumus.

Linux atklāj inotify ierobežojumus sadaļā /proc/sys/fs/inotify/. Vērotājs ir viens uzraudzīts failu sistēmas objekts inotify instancē. Kodola dokumentācijā ir izšķirtas trīs vadīklas:

  • max_user_watches: maksimālais vērojumu skaits vienam reālam lietotāja ID.
  • max_user_instances: maksimālais inotify instanču skaits vienam reālam lietotāja ID.
  • max_queued_events: maksimālais inotify instances rindā esošo notikumu skaits.

Pārbaudiet tos, neko nemainot:

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

Pirmo vērtību var nolasīt arī tieši:

cat /proc/sys/fs/inotify/max_user_watches
Linux terminālis, kurā redzamas fs.inotify.max_user_watches un fs.inotify.max_user_instances atgriezto vērtību vērtības.
Lasiet vērtības savā datorā, nevis pieņemot fiksētu Linux noklusējuma vērtību. Šeit parādītie skaitļi ir piemēri, nevis ieteicamās vērtības.

Nejauciet fs.inotify.max_user_watchesar fs.epoll.max_user_watches. Tie ir dažādi kodola mehānismi. Šīs kļūdas gadījumā parasti svarīgs ir inotify ceļš.

3. darbība. Meklējiet procesus, kas patērē daudz vērošanas reižu

Kodols katra procesa /proc/<pid>/fdinfoierakstos atklāj inotify uzraudzības informāciju. Proc_pid_fdinfo(5) dokumentācijā ir norādīts, ka rindas, kas sākas ar , inotifyapraksta uzraudzītos failus vai direktorijus.

Ātrai pārbaudei šī komanda parāda inotify rindas, kuras jūsu atļaujas ļauj jums lasīt:

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

Lai iegūtu noderīgāku aprēķinu par katru procesu jūsu pašreizējam lietotājam, izmantojiet:

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

Uztveriet šo izvadi kā diagnostikas novērtējumu, nevis perfektu uzskaiti, it īpaši, ja failu deskriptori tiek koplietoti. Tās mērķis ir atklāt acīmredzamus pārkāpējus, piemēram, vairākus vecus izstrādes serverus, dublētus IDE gadījumus vai vairākus novērotājus vienā un tajā pašā lielajā repozitorijā.

Linux termināļa saraksta piemērs inotify ierakstiem no procesa fdinfo failiem proc failu sistēmā.
Pārbaudot /proc/*/fdinfo/*var atklāt, kuri procesi satur inotify watch deskriptorus. Norādītās PID un inode vērtības ir ilustratīvas.

4. darbība. Apturiet novecojušos vērotājus un mēģiniet vēlreiz, pirms palielināt ierobežojumu.

Ja atrodat izstrādes serverus vai rīkus, kas jums vairs nav nepieciešami, vispirms aizveriet tos kā parasti. Redaktora vai izstrādes servera, kurā ir daudz vērotāju, restartēšana var arī atbrīvot vērojumus, ko atstājusi ilgstoša sesija. Izvairieties no plašas killallkomandas, ja vien precīzi nezināt, ko tā apturēs.

Pēc aizdomīgo procesu aizvēršanas atkārtoti palaidiet sākotnējo komandu. Ja tā tagad darbojas, iespējams, kodola izmaiņas nemaz nav nepieciešamas. Tomēr atkārtota noslodze liecina, ka darba slodzei ir nepieciešams vairāk novērošanas reižu vai ka rīks novēro pārāk daudz.

Ilustratīvs Linux terminālis, kurā redzama Vite procesa apturēšana un veiksmīga izstrādes servera palaišana pēc tam.
Restartējiet tikai to procesu, kurā ir daudz vērotāju un kuru atpazīstat. Piemērs pkillir ilustratīvs; izmantojiet sava faktiskā procesa nosaukumu un, ja iespējams, dodiet priekšroku lietojumprogrammas parastajai izslēgšanai.

5. darbība. Īslaicīgi pārbaudiet augstāku max_user_watches vērtību

Izpildes laika sysctl izmaiņas ir noderīgas, jo tās var pārbaudīt, pirms tās padarāt pastāvīgas. Vispirms ierakstiet pašreizējo vērtību:

sysctl fs.inotify.max_user_watches

Pēc tam izvēlieties vērtību, kas ir pietiekami liela novērotajai darba slodzei. Piemēram, ja apzināti nolemjat pārbaudīt 524 288 pulksteņus:

sudo sysctl fs.inotify.max_user_watches=524288

Šī ir vērtības piemērs, nevis universāls ieteikums . Inotify ierobežojumi pastāv ierobežotam kodola resursu patēriņam, tāpēc to palielināšana, neizprotot darba slodzi, nav bezmaksas. Labāka pieeja ir palielināt mērījumu soļus, atkārtoti mēģināt palaist lietojumprogrammu un apturēt, tiklīdz ir iegūta pietiekama brīva vieta.

Linux terminālis, kurā parādīts īslaicīgas sysctl izmaiņas piemērs, kas iestata fs.inotify.max_user_watches uz 524288 un nolasa vērtību atpakaļ.
Izpildes laika sysctl izmaiņas ļauj nekavējoties pārbaudīt jaunu vērotāja maksimālo vērtību. Šeit 524 288 ir tikai testa vērtības piemērs.

sysctl (8) rokasgrāmatā ir aprakstīta kodola parametru lasīšana un mainīšana izpildes laikā.

6. darbība. Padariet pārbaudīto vērtību noturīgu

Ja pagaidu izmaiņas novērš problēmu un vērtība ir piemērota jūsu datoram, saglabājiet to sysctl konfigurācijas failā. Systemd balstītos izplatījumos lokālais administrators var ievietot konfigurāciju /etc/sysctl.d/*.conf. systemd sysctl.d dokumentācijā ir paskaidrots, ka faili /etc/sysctl.d/ir paredzēti lokālā administratora konfigurācijai un tiek apstrādāti failu nosaukumu secībā.

Izveidojiet īpašu failu, nevis aprakiet izmaiņas nesaistītos iestatījumos:

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

Pievienojiet vērtību, kuru jau pārbaudījāt:

fs.inotify.max_user_watches=524288
Termināļa teksta redaktors, kurā parādīts /etc/sysctl.d/99-inotify.conf faila piemērs ar fs.inotify.max_user_watches, kas iestatīts uz 524288.
Saglabājiet testēto vērotāja iestatījumu īpašā sysctl.d konfigurācijas failā. Aizstājiet piemēra numuru ar vērtību, ko validējāt savai darba slodzei.

Ja jūsu sistēma neizmanto systemd sysctl.d plūsmu, pirms pastāvīgas konfigurācijas atrašanās vietas izvēles iepazīstieties ar savas izplatīšanas dokumentāciju.

7. darbība. Lietojiet pastāvīgo konfigurāciju un pārbaudiet to.

Varat pārstartēt sistēmu, bet tas parasti nav nepieciešams. Sistēmās ar procps sysctlrīku lietojiet sistēmas konfigurāciju, izmantojot:

sudo sysctl --system

Pēc tam pārbaudiet aktīvo vērtību:

sysctl fs.inotify.max_user_watches

Aktīvajai vērtībai ir jāatbilst jūsu paredzētajam iestatījumam. Ja tā neatbilst, pārbaudiet izvadi, vai nav sysctl --systemjaunāks konfigurācijas fails, kas ignorē jūsu ievadīto vērtību. sysctl.d nosaukumu piešķiršanas noteikumi ir svarīgi, jo jaunākiem failu nosaukumiem var būt prioritāte, ja viens un tas pats mainīgais tiek piešķirts vairāk nekā vienu reizi.

Linux terminālis, kurā redzams sudo sysctl --system, kas pielieto 99-inotify.conf un pēc tam pārbauda fs.inotify.max_user_watches.
Lietojiet konfigurāciju un pēc tam nolasiet parametru atpakaļ. Verifikācija ir uzticamāka nekā pieņemot, ka fails ir ielādēts.

8. darbība. Restartējiet lietojumprogrammu un samaziniet nevajadzīgo novērošanas tvērumu

Palaidiet lietojumprogrammu, kuras palaišana sākotnēji neizdevās. Ja tā startējas normāli, kodola puses labojums darbojas. Neapstājieties pie tā, ja vērošanas noslodze joprojām ir negaidīti augsta. Konfigurējiet lietojumprogrammu, ja tas tiek atbalstīts, lai izslēgtu direktorijus, kuriem nav nepieciešama tiešraides uzraudzība, piemēram, ģenerēto būvējuma izvadi, kešatmiņas, lielus žurnālus, piegādātāju kokus vai atkarību direktorijus.

Uzraudzības tvēruma samazināšana bieži vien ir labākais ilgtermiņa risinājums, jo tā samazina kodola resursu izmantošanu un samazina failu notikumu apstrādi. Daži rīki piedāvā aptaujas kā rezerves variantu, taču aptaujas var palielināt centrālā procesora un ievades/izvades aktivitāti, tāpēc parasti to labāk uzskatīt par saderības iespēju, nevis pirmo risinājumu.

Ilustratīvais Linux terminālis, kurā redzams, kā npm run dev veiksmīgi palaiž Vite serveri lokālajā resursdatorā pēc vērotāja konfigurācijas maiņas.
Pēdējā pārbaude: atkārtoti palaidiet sākotnējo izstrādes komandu un pārliecinieties, vai tā tiek startēta bez watcher-limit kļūdas.

Ko darīt, ja kļūda joprojām parādās?

Pārbaudiet, vai max_user_instances ir īstais ierobežojums

max_user_instancesierobežo inotify instanču skaitu uz vienu reālu lietotāja ID. Tomēr kļūmes režīms ir atšķirīgs: pašreizējā inotify_init(2) rokasgrāmatā tiek dokumentēts, EMFILEkad tiek sasniegts inotify instanču ierobežojums vienam lietotājam. Tas nozīmē, ka precīzs ENOSPC vērotāja ziņojums tiešāk norāda uz vērotājiem vai resursu piešķiršanu, nevis automātiski uz instanču ierobežojumu.

Neizmantojiet ulimit -n vispirms

ulimit -nkontrolē procesa atvērto failu deskriptoru ierobežojumu. Failu deskriptori ir saistīti ar inotify instancēm, taču viena inotify instance var saturēt daudz vērotāju. Tāpēc atvērto failu ierobežojuma palielināšana nav tiešs ENOSPC risinājums, inotify_add_watch()ko izraisa max_user_watches.

Konteineri, iespējams, nevarēs mainīt šo sysctl.

Docker dokumentē, ka ne katrs sysctl ir nosaukumtelpas un ka tas neatbalsta konteinera sysctl maiņu, kas modificētu resursdatora sistēmu. Ja kļūdainā darba slodze darbojas Docker vidē un fs.inotify.max_user_watchesto kontrolē resursdatora kodols, veiciet izmaiņas atbilstošajā resursdatorā vai virtuālajā mašīnā, nevis piespiedu kārtā no neprivileģēta konteinera. Skatiet Docker sysctl izpildlaika dokumentāciju .

Biežāk sastopamās kļūdas, no kurām jāizvairās

  • Pieņemot, ka ENOSPC vienmēr nozīmē pilnu disku. Sistēmas izsaukums inotify tieši izmanto ENOSPC novērošanas limita/resursu kļūmēm.
  • Mainot max_queued_events max_user_watches vietā. Rindas ierobežojums kontrolē neapstiprinātos notikumus, nevis to, cik failu sistēmas objektu lietotājs var novērot.
  • Milzīga vērtības iestatīšana bez mērīšanas. Pastāv nepaziņošanas ierobežojumi, lai ierobežotu kodola resursu izmantošanu; palieliniet apzināti.
  • Pastāvīgu izmaiņu veikšana pirms to testēšanas. Pagaidu sysctlizmaiņas ir vieglāk validēt un atsaukt.
  • Aizmirstot dublētus vērotāja procesus. Vairāki redaktori, izstrādes serveri vai sinhronizācijas rīki var patērēt vienu un to pašu lietotāja kopu.
  • sudo echo value > /proc/...Pāradresācijas segšanai tiek izmantots un tiek sagaidīts sudo. Apvalks tiek izpildīts >pirms sudopalaišanas. sudo sysctl ...Tā vietā izmantojiet.

Ātrās diagnostikas kontrolsaraksts

JautājumsKomanda vai darbībaKo tas jums stāsta
Vai šī ir ENOSPC vērotāja forma?Izlasiet pilnu pieteikuma kļūduAtdala vērotāja izsīkumu no diska vietas ENOSPC
Kāds ir mans vērotāju limits?sysctl fs.inotify.max_user_watchesParāda aktīvo skatīšanās reižu skaitu uz vienu lietotāju
Kuri procesi izmanto inotify?Pārbaudīt/proc/<pid>/fdinfoPalīdz atrast novecojušus vai procesus, kuros ir daudz vērotāju
Vai es varu to atrisināt, nemainot kodolu?Aizveriet dublētus/novecojušus vērotājus un mēģiniet vēlreizIzlaiž esošos pulksteņus
Vai augstāka robeža to atrisina?sudo sysctl fs.inotify.max_user_watches=VALUENekavējoties pārbauda izpildlaika vērtību
Vai labojums izturēs pārstartēšanu?Izmantojiet /etc/sysctl.d/*.confun pārbaudietPadara pārbaudītu iestatījumu pastāvīgu

Primārā dokumentācija

Šeit aprakstītā darbība ir ņemta no Linux kodola lietotāja telpas saskarnes dokumentācijas, proc failu sistēmas dokumentācijas, systemd sysctl.d dokumentācijas un Docker izpildlaika dokumentācijas. Svarīgāko informāciju skatiet inotify(7) , inotify_add_watch(2) , proc_pid_fdinfo(5) un sysctl.d(5) .

Atstājiet komentāru

Kā novērst kļūdu "ENOSPC: sasniegts failu vērotāju sistēmas ierobežojums" operētājsistēmā Linux

Kā novērst kļūdu "ENOSPC: sasniegts failu vērotāju sistēmas ierobežojums" operētājsistēmā Linux

Novērsiet Linux ENOSPC failu vērotāja kļūdas, pārbaudot inotify ierobežojumus, atrodot procesus, kuros ir daudz vērotāja resursu, droši paaugstinot ierobežojumus un padarot izmaiņas pastāvīgas.

Kā novērst kļūdu “Tailwind CSS stili netiek atjaunināti” Vite React lietotnē

Kā novērst kļūdu “Tailwind CSS stili netiek atjaunināti” Vite React lietotnē

Novērsiet Tailwind CSS stilu neatjaunināšanu pakalpojumā Vite React, pārbaudot Tailwind v4 iestatījumus, CSS importēšanu, avota noteikšanu, dinamiskās klases, HMR un novecojušas kešatmiņas.

Kā novērst ModuleNotFoundError kļūdu: Python 3 nav moduļa ar nosaukumu “pip”

Kā novērst ModuleNotFoundError kļūdu: Python 3 nav moduļa ar nosaukumu “pip”

Novērsiet Python 3 ModuleNotFoundError kļūdu pip funkcijai operētājsistēmās Windows, macOS un Linux, izmantojot ensurepip, OS pakotnes, virtuālās vides un interpretētāja pārbaudes.

Kā GitHub SSH novērst kļūdu "Atļauja liegta (publiskā atslēga)"

Kā GitHub SSH novērst kļūdu "Atļauja liegta (publiskā atslēga)"

Novērsiet GitHub SSH atļaujas liegšanu (publiskā atslēga), pārbaudot resursdatoru, aktīvo SSH atslēgu, GitHub kontu, SSO autorizāciju, attālo URL un 22. porta piekļuvi.

Kā novērst kļūdu “Git Push noraidīts: nepārtīšana uz priekšu”, nezaudējot izmaiņas

Kā novērst kļūdu “Git Push noraidīts: nepārtīšana uz priekšu”, nezaudējot izmaiņas

Droši izlabojiet Git ne-ātrās pārtīšanas kļūdu. Aizsargājiet lokālo darbu, ielādējiet attālinātus izmaiņu izmaiņu ierakstus, izvēlieties apvienošanu vai atkārtotu bāzi, atrisiniet konfliktus un veiciet izmaiņu pārtīšanu, nezaudējot izmaiņas.

Kā novērst kļūdu "Nginx 502 Bad Gateway", veicot starpniekservera darbību ar Node.js

Kā novērst kļūdu "Nginx 502 Bad Gateway", veicot starpniekservera darbību ar Node.js

Izlabojiet Nginx 502 Bad Gateway kļūdas ar Node.js augšupējo resursu, pārbaudot lietotnes portu, NGINX žurnālus, proxy_pass adresi, konteineru tīklošanu, taimautus un atkārtotu ielādi.

Kā TypeScript labot kļūdu “Type 'null' nav piešķirams tipam”

Kā TypeScript labot kļūdu “Type 'null' nav piešķirams tipam”

Novērsta TypeScript kļūda “Tips 'null' nav piešķirams tipam”, izmantojot apvienošanas tipus, sašaurināšanu, noklusējuma vērtības un drošas apgalvojumus, izmantojot strictNullChecks.

Kā novērst kļūdu “Prisma Client has not been generated yet”

Kā novērst kļūdu “Prisma Client has not been generated yet”

Novērsiet Prisma Client ģenerēšanas kļūdu, pārbaudot savu ģeneratoru, shēmu, izvades ceļu, importus, versijas, monorepo iestatījumu un izvietošanas būvēšanas soļus.

Kā novērst kļūdu "ERR_MODULE_NOT_FOUND" Node.js ESM importā

Kā novērst kļūdu "ERR_MODULE_NOT_FOUND" Node.js ESM importā

Izlabojiet Node.js ERR_MODULE_NOT_FOUND kļūdu ESM, pārbaudot importēšanas ceļus, failu paplašinājumus, pakotņu instalēšanu, eksportēšanu, ESM režīmu un tīrās instalācijas.

Kā novērst SSL sertifikāta problēmu: Nevar iegūt vietējo izdevēja sertifikātu Git

Kā novērst SSL sertifikāta problēmu: Nevar iegūt vietējo izdevēja sertifikātu Git

Novērsiet Git kļūdu “nevar iegūt vietējo izdevēja sertifikātu”, identificējot uzticības aizmugurprogrammu, instalējot pareizo CA ķēdi un saglabājot SSL verifikāciju iespējotu.