Native Fehler reagieren: ENOSPC: Systemlimit für die Anzahl der erreichten Dateiüberwacher


129

Ich habe eine neue leere reaktionsfähige native App eingerichtet.

Nach der Installation einiger Knotenmodule wurde dieser Fehler angezeigt.

Running application on PGN518.
internal/fs/watchers.js:173
   throw error;
   ^

Error: ENOSPC: System limit for number of file watchers reached, watch '/home/badis/Desktop/react-native/albums/node_modules/.staging'
   at FSWatcher.start (internal/fs/watchers.js:165:26)
   at Object.watch (fs.js:1253:11)
   at NodeWatcher.watchdir (/home/badis/Desktop/react-native/albums/node modules/sane/src/node watcher. js:175:20)
   at NodeWatcher.<anonymous> (/home/badis/Desktop/react-native/albums/node modules/sane/src/node watcher. js:310:16)
   at /home/badis/Desktop/react-native/albums/node modules/graceful-fs/polyfills.js:285:20
   at FSReqWrap.oncomplete (fs.js:154:5)

Ich weiß, dass es nicht genug Platz für den Wachmann gibt, um nach allen Dateiänderungen zu suchen.

Ich möchte wissen, wie ich hier am besten vorgehen kann.

Sollte ich den node_modulesOrdner ignorieren, indem ich ihn hinzufüge .watchmanconfig?


21
Posten Sie NIEMALS Bilder von Code, Fehlern oder Ausgaben! stackoverflow.com/help/how-to-ask
Rob

Haben Sie darüber nachgedacht, einen Teil des Codes zur Backlist von metro.config.js hinzuzufügen? Dies sollte das Scanvolumen
deepelement

Antworten:


223

Linux verwendet das inotify- Paket, um Dateisystemereignisse, einzelne Dateien oder Verzeichnisse zu beobachten.

Da React / Angular Dateien beim Speichern neu lädt und neu kompiliert, müssen alle Projektdateien im Auge behalten werden. Durch Erhöhen des Inotify-Überwachungslimits sollten die Warnmeldungen ausgeblendet werden.

Sie könnten versuchen, zu bearbeiten

# insert the new value into the system config
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

# check that the new value was applied
cat /proc/sys/fs/inotify/max_user_watches

# config variable name (not runnable)
fs.inotify.max_user_watches=524288

36
Dies erklärt nicht, was das Problem ist, was die Lösung ist oder wie die Lösung das Problem behebt.
Native Coder

2
Wow, ich bin auf ein ähnliches Problem gestoßen wie oben beschrieben, aber diese Lösung hat es zu 100% gelöst. danke
akolliy

3
Wie nehmen wir Beobachter weg, anstatt mehr zuzulassen?
Jonathan

2
Funktioniert, aber wenn ich das richtig lese, erhöht es die Grenze. Kann ich stattdessen geöffnete Beobachter schließen?
Zozo

1
@NativeCoder würde die neue Ausgabe dieses Problem lösen?
Zardilior

148

Die Bedeutung dieses Fehlers ist, dass die Anzahl der vom System überwachten Dateien das Limit erreicht hat !!

Ergebnis: Der ausgeführte Befehl ist fehlgeschlagen! Oder geben Sie eine Warnung aus (z. B. Ausführen eines reaktionsnativen Start-VSCodes).

Lösung:

Ändern Sie die Anzahl der Systemüberwachungsdateien

Ubuntu

sudo gedit /etc/sysctl.conf

Fügen Sie unten eine Zeile hinzu

fs.inotify.max_user_watches=524288

Dann speichern und beenden!

sudo sysctl -p

um es zu überprüfen

Dann ist es gelöst!


danke das ist einfacher für diejenigen mit desktop
tgkprog

Hey, das ist in meinem Fall gelöst. Auch auf meinem Beitrag geteilt. Vielen Dank
Rashid Khan

56

Sie können das Problem beheben, indem Sie die Anzahl der inotify-Beobachter erhöhen.

Wenn Sie nicht an den technischen Details interessiert sind und nur Listen to work erhalten möchten:

  • Wenn Sie Debian, RedHat oder eine andere ähnliche Linux-Distribution ausführen, führen Sie Folgendes in einem Terminal aus:

    $ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

  • Wenn Sie ArchLinux ausführen, führen Sie stattdessen den folgenden Befehl aus

    $ echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

Fügen Sie es dann in Ihr Terminal ein und drücken Sie die Eingabetaste, um es auszuführen.


Die technischen Details

Listen verwendet unter Linux standardmäßig inotify, um Verzeichnisse auf Änderungen zu überwachen. Es ist nicht ungewöhnlich, dass die Anzahl der Dateien, die Sie überwachen können, auf ein System begrenzt ist. Beispielsweise ist das Inotify-Limit von Ubuntu Lucid (64 Bit) auf 8192 festgelegt.

Sie können Ihr aktuelles Limit für die Überwachung von Inotify-Dateien ermitteln, indem Sie Folgendes ausführen:

$ cat /proc/sys/fs/inotify/max_user_watches

Wenn dieses Limit nicht ausreicht, um alle Dateien in einem Verzeichnis zu überwachen, muss das Limit erhöht werden, damit Listen ordnungsgemäß funktioniert.

Sie können vorübergehend ein neues Limit festlegen mit:

$ sudo sysctl fs.inotify.max_user_watches=524288
$ sudo sysctl -p

Wenn Sie Ihr Limit dauerhaft festlegen möchten, verwenden Sie:

$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p

Möglicherweise müssen Sie auch auf die Werte von achten max_queued_eventsund max_user_instanceswenn Sie zuhören, beschweren Sie sich weiter.


2
Wow, vielen Dank, dies hat mein Problem für einen ähnlichen Fehler mit React JS gelöst, als mein Projekt größer wurde, aber ich konnte die Vor- und Nachteile des Fehlers nicht verstehen. Das ist eine richtige Antwort, einen schönen Tag noch
Pierre Chevallier

4
Jemand muss eine bessere Lösung dafür finden. Ich sollte so etwas nicht tun müssen, wenn ich ein neues Projekt mit einer Hand voller Abhängigkeiten starte.
Patrick W. McMahon

Vielen Dank für Ihre ausführliche Antwort! Es hat mir sehr geholfen. Ich entwickle React Native, eigentlich benötigt RN Cli mehr Wert davon. Daher ändere ich es mit den obigen Befehlen erfolgreich. Ich frage mich nur, ob ein höherer Wert die Leistung und die Speichernutzung in schlechter Weise beeinträchtigen kann.
Moondaddi

8

löschen reagieren node_modules

rm -r node_modules

yarn or npm install

yarn start or npm start

Wenn ein Fehler auftritt, verwenden Sie diese Methode erneut


Warum funktioniert das? Wenn dadurch die Anzahl der überwachten Dateien verringert wird, werden die Dateien durch erneutes Installieren der erforderlichen Abhängigkeiten nicht wieder hinzugefügt?
Eiswasser

2
@icedwater Durch das Löschen von node_modules erstellt React eine neue inotify-Instanz ohne Überwachung. Es gibt wahrscheinlich ein Leck in React, das dazu führt, dass inotify-Instanzen gefüllt werden. Deshalb tritt der Fehler an erster Stelle auf.
Werfen Sie das Konto

7

Aus dem offiziellen Dokument :

"Visual Studio Code kann in diesem großen Arbeitsbereich nicht nach Dateiänderungen suchen" (Fehler ENOSPC)

Wenn Sie diese Benachrichtigung sehen, zeigt dies an, dass dem VS Code-Datei-Watcher die Handles ausgehen, da der Arbeitsbereich groß ist und viele Dateien enthält. Das aktuelle Limit kann wie folgt angezeigt werden:

cat /proc/sys/fs/inotify/max_user_watches

Das Limit kann durch Bearbeiten auf das Maximum erhöht werden

/etc/sysctl.conf

und Hinzufügen dieser Zeile am Ende der Datei:

fs.inotify.max_user_watches = 524288

Der neue Wert kann dann durch Ausführen geladen werden

sudo sysctl -p

Beachten Sie, dass Arch Linux etwas anders funktioniert. Weitere Informationen finden Sie unter Erhöhen der Anzahl der inotify-Beobachter.

Während 524.288 die maximale Anzahl von Dateien ist, die überwacht werden können, möchten Sie möglicherweise die Anzahl verringern, wenn Sie sich in einer Umgebung befinden, in der der Speicher besonders eingeschränkt ist. Jede Dateiüberwachung benötigt 540 Byte (32 Bit) oder ~ 1 KB (64 Bit). Unter der Annahme, dass alle 524.288 Uhren verbraucht sind, ergibt sich eine Obergrenze von etwa 256 MB (32 Bit) oder 512 MB (64 Bit) ).

Andere Option

Mit der Einstellung files.watcherExclude sollen bestimmte Arbeitsbereichsverzeichnisse aus dem VS Code-Datei-Watcher ausgeschlossen werden. Die Standardeinstellung für files.watcherExclude schließt node_modules und einige Ordner unter .git aus. Sie können jedoch auch andere Verzeichnisse hinzufügen, die VS Code nicht verfolgen soll.

"files.watcherExclude": {
    "**/.git/objects/**": true,
    "**/.git/subtree-cache/**": true,
    "**/node_modules/*/**": true
  }

7

Ich habe dieses Problem mit sudo gelöst, dh

sudo yarn start

oder

sudo npm start

5
Während diese Befehle die Frage lösen können, würde eine Erklärung, wie und warum dies das Problem löst, wirklich dazu beitragen, die Qualität Ihres Beitrags zu verbessern, und wahrscheinlich zu mehr Up-Votes führen. Denken Sie daran, dass Sie in Zukunft die Frage für die Leser beantworten, nicht nur für die Person, die jetzt fragt. Bitte bearbeiten Sie Ihre Antwort, um Erklärungen hinzuzufügen und anzugeben, welche Einschränkungen und Annahmen gelten.
Brian

Dies ist bis jetzt die einfachste Lösung, ohne eine Konfiguration zu ändern, aber wie @Brian sagte, hilft eine Referenz oder eine Erklärung auf effektive Weise.
Genius

1
Dies ist die schlechteste Lösung. sudoist nicht für diese Art der Verwendung vorgesehen und kann auch andere Probleme verursachen.
Igor Parra

2

Es passierte mir mit einer Node-App, die ich auf einer Debian-basierten Distribution entwickelte. Zuerst löste ein einfacher Neustart das Problem, aber es passierte erneut in einer anderen App.

Da dies mit der Anzahl der Beobachter zusammenhängt, die inotify verwendet, um Dateien zu überwachen und nach Änderungen in einem Verzeichnis zu suchen, müssen Sie eine höhere Anzahl als Limit festlegen:

Ich konnte es anhand der hier veröffentlichten Antwort lösen (danke an ihn!)

Also rannte ich:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Weitere Informationen zu den Vorgängen finden Sie unter https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers#the-technical-details

Ich hoffe es hilft!


Funktioniert hervorragend auf Manjaro!
Omar Dulaimi

1

Wie bereits von @snishalaka erwähnt, können Sie die Anzahl der inotify-Beobachter erhöhen.

Ich denke jedoch, dass die Standardanzahl hoch genug ist und nur erreicht wird, wenn Prozesse nicht ordnungsgemäß bereinigt werden. Daher habe ich meinen Computer einfach neu gestartet, wie in einem verwandten Github-Problem vorgeschlagen, und die Fehlermeldung war verschwunden.


0

Ich bin auf dieses Problem in einer Linuxmint- Distribution gestoßen . Es schien passiert zu sein, als es so viele Ordner und Unterordner / Dateien gab, die ich dem Ordner / public in meiner App hinzugefügt habe. Ich habe dieses Update angewendet und es hat gut funktioniert ...

$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf

Wechseln Sie in den Ordner / etc: cd /etc

Führen Sie dann Folgendes aus: sudo systcl -p

Möglicherweise müssen Sie Ihr Terminal immer npm startwieder schließen, damit es funktioniert.

Wenn dies fehlschlägt, empfehle ich, React-Skripte global zu installieren und Ihre Anwendung direkt damit auszuführen.

$ npm i -g --save react-scripts

dann anstatt npm startausführen react-scripts start, um Ihre Anwendung auszuführen.



-1
  1. Erstens können Sie jedes Mal mit Root-Rechten ausführen

    sudo npm start

  2. Oder Sie können den Ordner node_modules löschen und npm installzur erneuten Installation verwenden

  3. oder Sie können dauerhafte Lösung erhalten

    echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p


-5

Ich hatte das gleiche Problem mit der Bibliothek, wifiaber als ich mein Netzwerk änderte, funktionierte es perfekt.

Ändern Sie Ihre Netzwerkverbindung


1
Dies könnte ein Kommentar gewesen sein
Milan Desai
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.