Node.js: qu'est-ce qu'une erreur ENOSPC et comment résoudre?


349

J'ai un problème avec Node.js et le téléchargement de fichiers sur le serveur. Pour télécharger des fichiers sur le serveur, j'utilise ce plugin . Lors du démarrage du téléchargement de fichiers sur le serveur, le processus Node.js s'est bloqué et affiche une erreur:

Erreur: ENOSPC.

Le code du serveur ne s'exécute pas.

$ 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" signifie qu'il n'y a pas d'espace sur le lecteur, alors où enregistrez-vous votre fichier? ou peut-être que / tmp est plein?
Jacob A.

J'enregistre des fichiers dans / dev / xvda1. Puis-je faire rm -rf / tmp / *?
Giffo

1
oui, mais je ne pense pas que 1 Mo soit suffisant pour les téléchargements de fichiers, alors changez le tmp-dir en un autre emplacement comme dans la réponse de Blu Angel
Jacob A.

3
Cela semble différent de votre cas d'utilisation, mais voici une excellente solution à ce problème à partir d'une autre question SO.
Isaac Gregson

Pour tous ceux qui tombent dessus, consultez également cette réponse . Utiliser grognement et gorgée peut utiliser beaucoup de montres, donc cette réponse détaille comment augmenter cela.
Seiyria

Réponses:


1273

Exécutez la commande ci-dessous pour éviter ENOSPC:

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

Pour Arch Linux, ajoutez cette ligne à /etc/sysctl.d/99-sysctl.conf:

fs.inotify.max_user_watches=524288

Exécutez ensuite:

sysctl --system

Cela persistera également lors des redémarrages. Détails techniques Source



2
Ce n'est pas un nombre aléatoire. Chaque montre inotify utilisée occupe 540 octets (système 32 bits) ou 1 Ko (double - sur 64 bits). Cela vient de la mémoire du noyau, qui n'est pas échangeable. Donc, en supposant que vous définissiez le maximum à 524288 et que tous aient été utilisés (improbable), vous utiliseriez environ. 256 Mo / 512 Mo de mémoire du noyau 32 bits / 64 bits.
Murali Krishna

Théoriquement, il n'y a pas de valeur maximale, tant que vous avez suffisamment de RAM. En pratique, 524288 a été officiellement recommandé par les applications, et les gens l'ont défini à 2 millions, avec l'utilisation de la mémoire qui l'accompagne.
Murali Krishna

Cela m'a aidé à résoudre le problème également ce lien github.com/guard/listen/wiki/… a tous les détails. Merci
amitsin6h

Quelqu'un d'autre trouve-t-il étrange que l'erreur qui se soit produite soit simplement ENOSPC? Pourquoi ne pas avoir une description juste après la sortie comme ENOSPC - no space on drive? Bien sûr, le code d'erreur est logique une fois que vous savez ce que cela signifie ( E rror NO SP un C e), mais pourquoi ne pas simplement donner aux utilisateurs cette information à l' avant?
Shadoninja

73

ENOSPC signifie qu'il n'y a pas d'espace sur le lecteur.

Peut /tmp- être est plein? Vous pouvez configurer npmpour utiliser un dossier temporaire différent en définissant npm config set tmp /path/to/some/other/dir, ou peut-être tout supprimer du /tmpdossier.

Source: npm 1.1.21 ne peut pas écrire, ENOSPC dans le référentiel de npm dans github.

Remarque J'ai résolu mon problème de la manière décrite dans la source ci-dessus. Cependant, voir la réponse de Murali Krishna ci-dessous, qui est plus complète.


J'ai nettoyé le dossier / tmp et changé le dossier temporaire npm, mais j'ai le même problème. npm config get tmpshow / vol / deploy / tmp
Giffo

pouvez-vous montrer votre avis? sortie que vous obtenez après le changement de dir
Blu

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

1
avez-vous un écouteur d'erreur? sinon, écrivez-en un puis vérifiez la sortie résultante
Blu

72
mal, cette erreur se produit souvent dans les espaces de travail du développeur lors de la visualisation des fichiers (via grunt / gulp). Cela a à voir avec une limite unix du nombre de fichiers qu'un processus peut regarder (veille native). L'autre réponse (echo fs.inotify.max_user_watches = 524288) est la solution dans ces cas.
cancerbero


20

Un moyen simple de résoudre mon problème était:

npm cache clear

npm ou un processus contrôlé par lui regarde trop de fichiers. La mise à jour de max_user_watches sur le noeud de build peut le réparer pour toujours. Pour debian, mettez ce qui suit sur le terminal:

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

Si vous voulez savoir comment augmenter le nombre d'observateurs inotify, cliquez uniquement sur le lien.


2
J'ai ce problème avec le forever,corrigé lorsque je crée le fichier .foreverignoreet que j'y ajoute le dossiernode_modules.
Vilintritenmert

7

Le redémarrage de la machine a résolu le problème pour moi. J'ai d'abord essayé d'essuyer /tmp/mais le nœud se plaignait toujours.


Le problème est revenu après le redémarrage. Faire dedupeaidé.
Parnab Sanyal

4

Sous Linux, cela risque de limiter le nombre de surveillances de fichiers.

Le serveur de développement utilise inotify pour implémenter le rechargement à chaud. L'API inotify permet au serveur de développement de surveiller les fichiers et d'être averti lorsqu'ils changent.

La limite de surveillance des fichiers inotify par défaut varie d'une distribution à l'autre (8192 sur Fedora). Les besoins du serveur de développement dépassent souvent cette limite.

La meilleure approche consiste à essayer d'augmenter temporairement la limite de surveillance des fichiers, puis à en faire un changement de configuration permanent si vous en êtes satisfait. Notez, cependant, que cela modifie la configuration de l'ensemble de votre système, pas seulement le nœud.

Pour afficher votre limite actuelle:

sysctl fs.inotify.max_user_watches

Pour définir temporairement une nouvelle limite:

# 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

Pour définir une limite permanente:

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

Merci d'avoir résolu mon problème.
Josh

Merci!! votre solution temporaire fonctionne!
JRichardsz

3

Sur Ubuntu 18.04, j'ai essayé une astuce que j'ai utilisée pour réactiver le fichier en regardant par ionic / node, et cela fonctionne également ici. Cela pourrait être utile pour ceux qui n'ont pas accès aux fichiers de configuration du système.

CHOKIDAR_USEPOLLING=1 npm start

2

J'ai résolu mon problème en tuant tous les processus de contrôle du tracker (vous pouvez essayer si vous utilisez GDM, évidemment pas votre cas si le script s'exécute sur un serveur)

tracker-control -r

Ma configuration: Arch avec GNOME 3


1
J'ai oublié de le préciser, oui, j'étais dans la même situation: Arch + GNOME
Denys Vitali

2

Si votre /tmpmontage sur un système de fichiers Linux est monté en débordement (souvent de 1 Mo), cela est probablement dû au fait que vous ne spécifiez pas /tmpcomme sa propre partition et que votre système de fichiers racine est rempli et a /tmpété remonté comme solution de secours.

Pour résoudre ce problème après avoir libéré de l'espace, démontez simplement la solution de secours et elle devrait remonter à son point d'origine:

sudo umount overflow

2

Si vous rencontrez cette erreur lors de la tentative d'exécution de la ember servercommande, veuillez rm -rf tmprépertoire. Ensuite, exécutez à ember snouveau. Ça m'a aidé.


2

J'avais la même erreur. Pendant que je lance l'application Reactjs. Ce que je fais, c'est simplement supprimer le dossier node_modules et taper et réinstaller node_modules. Cela supprime l'erreur.


cela fonctionne vraiment, pourquoi est-il voté - c'est la question. Mais cela résout le problème, alors de quoi avez-vous besoin d'autre?
AlexNikonov

1
Je ne sais pas, peut-être que les gens ont des problèmes personnels avec moi. hahaha
Ghayyas Mubashir

1

Pour moi, j'avais atteint le nombre maximum de fichiers qu'un utilisateur peut posséder

Vérifiez vos numéros avec quota -set que le nombre sous fichiers n'est pas trop proche du quota


1

Cela semble très étrange, mais oui, un redémarrage du système ou killall noderésout le problème pour moi.


-15

Dans mon cas, sur linux, sudoing a résolu le problème.

Exemple:

sudo gulp dev

5
C'est dangereux! Il a probablement réussi car un certain pourcentage d'espace disque est réservé à root, ce qui ne résout pas le problème principal - aucun espace disponible en tant qu'utilisateur non privilégié (à l'emplacement cible).
Liam Dawson

L'utilisation de sudo est un excellent moyen de faire bouger les choses, mais la plupart des gens négligent de comprendre tout ce qui se passe lorsque sudo est utilisé. En particulier avec les modules npm et npm, l'utilisation de sudo peut entraîner l'exécution de choses par root que l'utilisateur ne souhaite pas voir effectuées par root, comme la création de fichiers ou l'utilisation de ports protégés. Fondamentalement, le conseil "use sudo" tombe à plat sur son visage (peut-être après avoir trébuché et regardé le soleil pendant un moment) en ce qui concerne nvm / npm / node.
bschlueter
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.