Error de Nodemon: se alcanzó el límite del sistema para el número de observadores de archivos


102

Estoy aprendiendo graphqly usando prisma-bindingpara operaciones graphql. Me enfrento a este nodemonerror mientras inicio mi servidor de nodos y me da la ruta del archivo de esquema que se genera automáticamente mediante un archivo graphql-cli. ¿Alguien puede decirme de qué se trata este error?

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

Este es el error ulimit de linux ver aquí stackoverflow.com/questions/34588/…
Janith

¡Probé esto! ¡Obteniendo el mismo error nuevamente!
Rehan Sattar

2
Probablemente esté viendo demasiados archivos. ¿Quizás también incluye el directorio nod_modules?
Mikkel

node_modules son esenciales porque todos los paquetes están ahí. Intenté eliminar los procesos anteriores que se ejecutaban en el puerto de mi servidor, funcionó para mí, pero no sé cuánto tiempo tomará ahora: D
Rehan Sattar

Respuestas:


226

Si está utilizando Linux, su proyecto está alcanzando el límite de observadores de archivos de su sistema

Para solucionar esto, en su terminal, intente:

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

2
utilizar sysctl --systempara recargar para sistemas más recientes
YLJ

6
¿Hay otras implicaciones que debamos saber cuando hacemos esto? Sabía que esto ayudaba a resolver el problema, lo intenté yo mismo. Pero soy un poco escéptico sobre los posibles efectos secundarios que puede causar esta solución.
Aldee

@Aldee sobre las implicaciones técnicas de este cambio, recomiendo consultar este wiki: github.com/guard/listen/wiki/…
Isac Moura

Esto también resolvió muchos problemas con los complementos npm. thx
The Bumpaster

3
No recomendaría aumentarlo tanto si no está seguro de cuántos están en uso. Verifique el número en uso con lo siguientefind /proc/*/fd -user "$USER" -lname anon_inode:inotify -printf '%hinfo/%f\n' 2>/dev/null | xargs cat | grep -c '^inotify'
Nick Bull

23

A veces tengo este problema cuando trabajo con VSCode en mi máquina Ubuntu.

En mi caso, la siguiente solución alternativa ayuda:

detenga el observador, cierre VScode, inicie el observador, abra VSCode nuevamente.


¡Así es! Debido a VSCode. Debería ser el modo de guardado automático.
Hùng Ng Vi

19

Necesita aumentar el límite de observadores inotify para los usuarios de su sistema. Puede hacer esto desde la línea de comando con:

sudo sysctl -w fs.inotify.max_user_watches=100000

Sin embargo, eso persistirá solo hasta que reinicie. Para que esto sea permanente, agregue un archivo /etc/sysctl.d/10-user-watches.confcon el siguiente contenido:

fs.inotify.max_user_watches = 100000

Después de realizar el cambio anterior (o cualquier otro), puede volver a cargar la configuración de todos los archivos de configuración sysctl /etccon sudo sysctl -p.


Muchas gracias! ¡¡Trabajó para mi!! Pero, ¿dónde tengo que agregar este archivo?
Rehan Sattar

@RehanSattar Crea un archivo /etc/sysctl.d/10-user-watches.confy ponlo fs.inotify.max_user_watches = 100000.
cjs

Poniendo esto aquí para completar echo fs.inotify.max_user_watches=100000 | sudo tee /etc/sysctl.d/10-user-watches.conf && sudo sysctl -p.
RedHatter

2
utilizar sysctl --systempara recargar para sistemas más recientes
YLJ

4

Para probar los cambios, configuro temporalmente el parámetro con el valor 524288.

sysctl -w fs.inotify.max_user_watches=524288

luego procedo a validar:

npm run serve

Y el problema fue resuelto, para que sea permanente, debes intentar agregar una línea en el archivo "/etc/sysctl.conf" y luego reiniciar el servicio sysctl:

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

sudo systemctl restart systemd-sysctl.service

Esta sugerencia para probar temporalmente no tiene precio. Gracias
intmarinoreturn0

1

Puede ser difícil saber cuánto aumentar el número de observadores. Entonces, aquí hay una utilidad para duplicar la cantidad de observadores:

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

0

Tuve el mismo problema, sin embargo, el mío venía de webpack. Afortunadamente, tienen una gran solución en su sitio :

Para algunos sistemas, ver muchos archivos puede resultar en un gran uso de CPU o memoria. Es posible excluir una carpeta enorme como node_modules usando una expresión regular:

webpack.config.js

module.exports = {
  watchOptions: {
    ignored: /node_modules/
  }
};

-3

En Linux, de hecho he ejecutado sudo. sudo npm start


5
Esto a menudo funcionará porque root generalmente tiene un límite de vigilancia inotify mucho más alto que los usuarios habituales, pero es una muy mala idea ejecutar cosas como root cuando no es necesario. Vea mi respuesta a esta pregunta sobre cómo cambiar el límite de usuarios.
cjs
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.