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
Rehan Sattar
fuente
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
Isac Moura
fuente
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.

Juri Sinitson
fuente
¡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.

cjs
fuente
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
Manuel Lazo
fuente
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
Nick Bull
fuente
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/
  }
};
Sabio
fuente
-3

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

Fernando Silva Maransatto
fuente
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