Node.js: Was ist ein ENOSPC-Fehler und wie kann er behoben werden?


349

Ich habe ein Problem mit Node.js und dem Hochladen von Dateien auf den Server. Zum Hochladen von Dateien auf den Server verwende ich dieses Plugin . Beim Starten des Datei-Uploads auf den Server stürzte der Node.js-Prozess ab und zeigte einen Fehler an:

Fehler: ENOSPC.

Der Servercode wird nicht ausgeführt.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  4.1G  3.5G  55% /
udev            288M  8.0K  288M   1% /dev
tmpfs           119M  168K  118M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            296M     0  296M   0% /run/shm
/dev/xvdf       9.9G  3.0G  6.5G  32% /vol
overflow        1.0M  1.0M     0 100% /tmp

1
"ENOSPC" bedeutet, dass auf dem Laufwerk kein Speicherplatz vorhanden ist. Wo speichern Sie Ihre Datei? oder vielleicht ist / tmp voll?
Jacob A.

Ich speichere Dateien in / dev / xvda1. Kann ich rm -rf / tmp / * machen?
Giffo

1
Ja, aber ich glaube nicht, dass 1 MB für Datei-Uploads ausreicht. Ändern Sie daher das tmp-Verzeichnis an einen anderen Ort, wie in der Antwort von Blu Angel
Jacob A.

3
Klingt so, als ob Ihr Anwendungsfall anders wäre, aber hier ist eine großartige Lösung für dieses Problem aus einer anderen SO-Frage.
Isaac Gregson

Wenn Sie darüber stolpern, lesen Sie auch diese Antwort . Die Verwendung von Grunzen und Schlucken kann viele Uhren verwenden, daher wird in dieser Antwort detailliert beschrieben, wie dies erhöht werden kann.
Seiyria

Antworten:


1272

Führen Sie den folgenden Befehl aus, um ENOSPC zu vermeiden:

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

Fügen Sie für Arch Linux diese Zeile hinzu zu /etc/sysctl.d/99-sysctl.conf:

fs.inotify.max_user_watches=524288

Führen Sie dann Folgendes aus:

sysctl --system

Dies bleibt auch bei Neustarts bestehen. Technische Details Quelle



2
Es ist keine Zufallszahl. Jede verwendete inotify-Uhr belegt 540 Byte (32-Bit-System) oder 1 kB (doppelt - bei 64-Bit). Dies kommt aus dem Kernel-Speicher, der nicht austauschbar ist. Angenommen, Sie haben das Maximum auf 524288 festgelegt und alle wurden verwendet (unwahrscheinlich). 256 MB / 512 MB 32-Bit / 64-Bit-Kernelspeicher.
Murali Krishna

Theoretisch gibt es keinen Maximalwert, solange Sie über genügend RAM verfügen. In der Praxis wurde 524288 von Apps offiziell empfohlen, und die Leute haben es auf 2 Millionen eingestellt, mit der damit verbundenen Speichernutzung.
Murali Krishna

Dies hat mir geholfen, das Problem zu lösen. Auch dieser Link github.com/guard/listen/wiki/… enthält alle Details. Vielen Dank
amitsin6h

Findet es jemand anders seltsam, dass der Fehler, der herauskommt, einfach ist ENOSPC? Warum nicht gleich nach der Ausgabe eine Beschreibung wie ENOSPC - no space on drive? Sicher, der Fehlercode macht Sinn , wenn Sie wissen , was es bedeutet , ( E rror NO SP einer C e), aber warum nicht nur die Benutzer , dass Informationen vorne?
Shadoninja

73

ENOSPC bedeutet, dass auf dem Laufwerk kein Speicherplatz vorhanden ist.

Vielleicht /tmpist voll? Sie können konfigurieren npm, dass ein anderer temporärer Ordner verwendet wird, indem Sie die Einstellungen vornehmen npm config set tmp /path/to/some/other/diroder alles aus dem /tmpOrdner löschen .

Quelle: npm 1.1.21 kann nicht schreiben, ENOSPC im Repo von npm in Github.

Hinweis Ich habe mein Problem auf die in der obigen Quelle beschriebene Weise gelöst. Siehe jedoch die Antwort von Murali Krishna weiter unten, die umfassender ist.


Ich habe den Ordner / tmp bereinigt und den Ordner npm temp geändert, habe aber das gleiche Problem. npm config get tmpshow / vol / deploy / tmp
Giffo

Kannst du deine Leistung noch einmal zeigen? Ausgabe, die Sie erhalten Nach Änderung dir
Blu

events.js:71 throw arguments[1]; // Unhandled 'error' event Error: ENOSPC, write
Giffo

1
Hast du einen Fehler Listener? Wenn nicht, schreiben Sie eine und überprüfen Sie die resultierende Ausgabe
Blu

72
Falsch, dieser Fehler tritt häufig in Entwicklerarbeitsbereichen auf, wenn Dateien angezeigt werden (über Grunzen / Schlucken). Dies hat mit einem Unix-Limit zu tun, wie viele Dateien ein Prozess überwachen kann (native Überwachung). Die andere Antwort (echo fs.inotify.max_user_watches = 524288) ist in diesen Fällen die Lösung.
Cancerbero


20

Ein einfacher Weg, um mein Problem zu lösen, war:

npm cache clear

npm oder ein von ihm gesteuerter Prozess überwacht zu viele Dateien. Das Aktualisieren von max_user_watches auf dem Build-Knoten kann das Problem für immer beheben. Für debian setzen Sie folgendes auf Terminal:

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

Wenn Sie wissen möchten, wie Sie die Anzahl der inotify-Beobachter erhöhen können, klicken Sie einfach auf den Link.


2
Ich habe dieses Problem mit forever,behoben, wenn ich die Datei erstelle .foreverignoreund ihnen Ordner hinzufügenode_modules.
Vilintritenmert

7

Ein Neustart der Maschine löste das Problem für mich. Ich habe zuerst versucht zu löschen, /tmp/aber der Knoten hat sich immer noch beschwert.


Das Problem trat nach dem Neustart wieder auf. Tun hat dedupegeholfen.
Parnab Sanyal

4

Unter Linux ist dies wahrscheinlich eine Begrenzung der Anzahl der Dateiüberwachungen.

Der Entwicklungsserver verwendet inotify , um das Hot- Reloading zu implementieren. Mit der inotify-API kann der Entwicklungsserver Dateien überwachen und benachrichtigt werden, wenn sie sich ändern.

Das Standardlimit für die Überwachung von Inotify-Dateien variiert von Verteilung zu Verteilung (8192 unter Fedora). Die Anforderungen des Entwicklungsservers überschreiten häufig diese Grenze.

Der beste Ansatz besteht darin, das Limit für die Dateiüberwachung vorübergehend zu erhöhen und dann eine permanente Konfigurationsänderung vorzunehmen, wenn Sie damit zufrieden sind. Beachten Sie jedoch, dass dies die Konfiguration Ihres gesamten Systems ändert, nicht nur den Knoten.

So zeigen Sie Ihr aktuelles Limit an:

sysctl fs.inotify.max_user_watches

So legen Sie vorübergehend ein neues Limit fest:

# this limit will revert after reset
sudo sysctl fs.inotify.max_user_watches=524288
sudo sysctl -p
# now restart the server and see if it works

So legen Sie ein dauerhaftes Limit fest:

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

Vielen Dank, dass dies mein Problem gelöst hat.
Josh

Vielen Dank!! Ihre vorübergehende Lösung funktioniert!
JRichardsz

3

Unter Ubuntu 18.04 habe ich einen Trick ausprobiert, mit dem ich die Dateiüberwachung durch ionic / node reaktiviert habe, und sie funktioniert auch hier. Dies kann für diejenigen nützlich sein, die keinen Zugriff auf Systemkonf-Dateien haben.

CHOKIDAR_USEPOLLING=1 npm start

2

Ich habe mein Problem gelöst und alle Tracker-Steuerungsprozesse beendet (Sie könnten es versuchen, wenn Sie GDM verwenden, offensichtlich nicht Ihren Fall, wenn das Skript auf einem Server ausgeführt wird).

tracker-control -r

Mein Setup: Arch mit GNOME 3


1
Ich habe vergessen, es anzugeben, ja, ich war in der gleichen Situation: Arch + GNOME
Denys Vitali

2

Wenn Ihr /tmpMount auf einem Linux-Dateisystem als Überlauf bereitgestellt wird (häufig mit einer Größe von 1 MB), liegt dies wahrscheinlich daran, dass Sie nicht /tmpals eigene Partition angegeben haben und Ihr Root-Dateisystem voll ist und /tmpals Fallback erneut bereitgestellt wurde.

Um dies zu beheben, nachdem Sie Speicherplatz freigegeben haben, entfernen Sie einfach den Fallback und er sollte an seinem ursprünglichen Punkt erneut bereitgestellt werden:

sudo umount overflow

2

Wenn Sie beim Ausführen des ember serverBefehls auf diesen Fehler stoßen, geben Sie bitte das rm -rf tmpVerzeichnis ein. Dann ember swieder laufen . Es hat mir geholfen.


2

Ich hatte den gleichen Fehler. Während ich Reactjs App starte. Ich entferne einfach den Ordner node_modules und tippe und installiere node_modules erneut. Dadurch wird der Fehler behoben.


das funktioniert wirklich, warum wird es herabgestimmt - es ist die Frage. Aber es löst das Problem, was brauchen Sie sonst noch?
AlexNikonov

1
Weiß nicht, vielleicht haben die Leute ein persönliches Problem mit mir. hahaha
Ghayyas Mubashir

1

Für mich hatte ich die maximale Anzahl von Dateien erreicht, die ein Benutzer besitzen kann

Überprüfen Sie Ihre Nummern mit quota -sund stellen Sie sicher, dass die Nummer unter Dateien nicht zu nahe am Kontingent liegt


1

Das klingt sehr seltsam, aber ja, ein Systemneustart oder killall nodelöst das Problem für mich.


-15

In meinem Fall hat sudoing unter Linux das Problem behoben.

Beispiel:

sudo gulp dev

5
Das ist gefährlich! Dies ist wahrscheinlich gelungen, weil ein bestimmter Prozentsatz des Speicherplatzes für root reserviert ist, wodurch das Kernproblem nicht behoben wird - kein Speicherplatz als nicht privilegierter Benutzer (am Zielspeicherort) verfügbar.
Liam Dawson

Die Verwendung von Sudo ist eine großartige Möglichkeit, um Dinge geschehen zu lassen, aber die meisten Menschen vernachlässigen es, alles zu verstehen, was passiert, wenn Sudo verwendet wird. Insbesondere bei npm- und npm-Modulen kann die Verwendung von sudo dazu führen, dass Dinge von root ausgeführt werden, die der Benutzer nicht von root ausführen lassen möchte, z. B. die Erstellung von Dateien oder die Verwendung geschützter Ports. Grundsätzlich fällt der Ratschlag "Use Sudo" flach auf sein Gesicht (möglicherweise nachdem er einen Moment lang gestolpert und in die Sonne gestarrt hat), wenn es um nvm / npm / node geht.
bschlueter
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.