Nodemon-Fehler: Systemlimit für die Anzahl der erreichten Dateiüberwacher

80

Ich lerne graphqlund verwende prisma-bindingfür Graphql-Operationen. Beim nodemonStarten meines Knotenservers tritt dieser Fehler auf, und er gibt mir den Pfad der Schemadatei an, die automatisch von a generiert wird graphql-cli. Kann mir jemand sagen, worum es bei diesem Fehler geht?

Error:

Internal watch failed: ENOSPC: System limit for number of file watchers reached, watch '/media/rehan-sattar/Development/All projects/GrpahQl/graph-ql-course/graphql-prisma/src/generated
Rehan Sattar
quelle
Dies ist der Linux Ulimit Fehler siehe hier stackoverflow.com/questions/34588/…
Janith
Versuchte dies! Den gleichen Fehler erneut erhalten!
Rehan Sattar
2
Sie sehen wahrscheinlich zu viele Dateien. Vielleicht enthält es auch das Verzeichnis nod_modules?
Mikkel
node_modules sind wichtig, weil alle Pakete da sind. Ich habe versucht, die vorherigen Prozesse zu beenden, die auf dem Port meines Servers ausgeführt wurden. Es hat bei mir funktioniert, aber ich weiß nicht, wie lange es jetzt dauern wird: D
Rehan Sattar

Antworten:

180

Wenn Sie Linux verwenden, erreicht Ihr Projekt das Limit für die Dateiüberwachung Ihres Systems

Um dies zu beheben, versuchen Sie auf Ihrem Terminal:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
Isac Moura
quelle
Verwenden Sie sysctl --systemdiese
Option
3
Gibt es andere Implikationen, die wir wissen müssen, wenn wir dies tun? Ich wusste, dass dies hilft, das Problem zu lösen, ich habe es selbst versucht. Aber ich bin ein bisschen skeptisch, welche möglichen Nebenwirkungen dieses Update verursachen kann.
Aldee
@Aldee über die technischen Auswirkungen dieser Änderung Ich empfehle, dieses Wiki zu überprüfen: github.com/guard/listen/wiki/…
Isac Moura
1
Ich würde nicht empfehlen, es so stark zu erhöhen, wenn Sie nicht sicher sind, wie viele verwendet werden. Überprüfen Sie die verwendete Nummer mit den folgendenfind /proc/*/fd -user "$USER" -lname anon_inode:inotify -printf '%hinfo/%f\n' 2>/dev/null | xargs cat | grep -c '^inotify'
Nick Bull
22

Ich bekomme manchmal dieses Problem, wenn ich mit VSCode auf meinem Ubuntu-Computer arbeite.

In meinem Fall hilft die folgende Problemumgehung:

Stoppen Sie den Watcher, schließen Sie VScode, starten Sie den Watcher und öffnen Sie VSCode erneut.

Juri Sinitson
quelle
Korrekt! Wegen VSCode. Es sollte der automatische Speichermodus sein.
Hùng Ng Vi
17

Sie müssen das Inotify- Watcher-Limit für Benutzer Ihres Systems erhöhen. Sie können dies über die Befehlszeile tun mit:

sudo sysctl -w fs.inotify.max_user_watches=100000

Dies bleibt jedoch nur bis zum Neustart bestehen. Fügen Sie eine Datei /etc/sysctl.d/10-user-watches.confmit dem folgenden Inhalt hinzu, um dies dauerhaft zu machen :

fs.inotify.max_user_watches = 100000

Nachdem Sie die oben genannten (oder andere) Änderungen vorgenommen haben, können Sie die Einstellungen aus allen sysctl-Konfigurationsdateien /etcmit neu laden sudo sysctl -p.

cjs
quelle
Ich danke dir sehr! Hat für mich gearbeitet !! Aber wo muss ich diese Datei hinzufügen?
Rehan Sattar
@RehanSattar Erstelle eine Datei /etc/sysctl.d/10-user-watches.confund lege sie hinein fs.inotify.max_user_watches = 100000.
cjs
Der Vollständigkeit halber hier einfügen echo fs.inotify.max_user_watches=100000 | sudo tee /etc/sysctl.d/10-user-watches.conf && sudo sysctl -p.
RedHatter
2
Verwenden Sie sysctl --systemdiese
Option
1

Um die Änderungen zu testen, habe ich den Parameter temporär auf den Wert 524288 gesetzt.

sysctl -w fs.inotify.max_user_watches=524288

dann gehe ich zur Validierung über:

npm run serve

Und das Problem wurde behoben. Um es dauerhaft zu machen, sollten Sie versuchen, eine Zeile in die Datei "/etc/sysctl.conf" einzufügen und dann den sysctl-Dienst neu zu starten:

cat /etc/sysctl.conf |tail -n 2
fs.inotify.max_user_watches=524288

sudo systemctl restart systemd-sysctl.service
Manuel Lazo
quelle
0

Es kann schwierig sein zu wissen, um wie viel die Anzahl der Beobachter erhöht werden kann. Hier ist ein Dienstprogramm, mit dem Sie die Anzahl der Beobachter verdoppeln können:

function get_inode_watcher_count() {
  find /proc/*/fd -user "$USER" -lname anon_inode:inotify -printf '%hinfo/%f\n' 2>/dev/null | 
  xargs cat | 
  grep -c '^inotify'
}

function set_inode_watchers() {
  sudo sysctl -w fs.inotify.max_user_watches="$1"
}

function double_inode_watchers() {
  watcher_count="$(get_inode_watcher_count)"
  set_inode_watchers "$((watcher_count * 2))"

  if test "$1" = "-p" || test "$1" = "--persist"; then
    echo "fs.inotify.max_user_watches = $((watcher_count * 2))" > /etc/sysctl.d/10-user-watches.conf
  fi
}

# Usage
double_inode_watchers
# to make the change persistent
double_inode_watchers --persist
Nick Bull
quelle
-3

Unter Linux habe ich tatsächlich mit sudo gearbeitet. sudo npm start

Fernando Silva Maransatto
quelle
5
Dies funktioniert häufig, da root normalerweise ein viel höheres Inotify-Überwachungslimit hat als normale Benutzer, aber es ist eine sehr schlechte Idee, Dinge als root auszuführen, wenn sie nicht benötigt werden. In meiner Antwort auf diese Frage erfahren Sie, wie Sie das Benutzerlimit ändern können.
cjs