Se alcanzó el límite de usuarios de relojes inotify en Ubuntu 16.04

43

Acabo de instalar Ubuntu 16.04 y recibo esta advertencia cuando inicio SmartGit :

IOException: User limit of inotify watches reached

Además, recibo esta advertencia tail -f:

tail: inotify resources exhausted 

tail: inotify cannot be used, reverting to polling

Nunca recibo este error con Ubuntu 14.04 y las aplicaciones y archivos que estoy usando en el nuevo Ubuntu son exactamente los mismos que estaba usando en la versión anterior.

Las únicas diferencias relevantes son que agregué un Disco Duro adicional en la PC y configuré la herramienta de respaldo de Ubuntu. ¿Puede este problema estar relacionado con un segundo disco o con la herramienta de copia de seguridad?

Andrea
fuente

Respuestas:

76

El valor predeterminado actual en Xenial es 8192 (consulte fs / notify / inotify / inotify_user.c en la fuente del núcleo), puede verificar esto imprimiendo el archivo en stdout:

cat /proc/sys/fs/inotify/max_user_watches
8192

Puede aumentar el número, por ejemplo, duplicando esto a 16384, usando:

echo 16384 | sudo tee /proc/sys/fs/inotify/max_user_watches

Tenga en cuenta que los relojes inotify consumen memoria, creo que son alrededor de 160 bytes por reloj en sistemas de 64 bits.

Para configurar esto permanentemente, agregue una entrada a /etc/sysctl.conf, por ejemplo:

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

..o editar manualmente /etc/sysctl.conf(necesita privilegios de root para actualizarlo) y luego ejecutarsudo sysctl -p

Colin Ian King
fuente
Si, gracias. Lo dupliqué y ahora ya no tengo advertencias. ¿Cuánta memoria (como máximo) se consumirá para 16.384 relojes? Mis cálculos me dan más o menos 2.5MB . ¿Es correcto?
Andrea
Algo en ese orden, más algo de gastos generales; no es demasiado grande en el gran esquema de las cosas.s
Colin Ian King
Aquí hay más información sobre el posible consumo de memoria de los relojes (usados) askubuntu.com/questions/154255/…
michael
11

Las respuestas anteriores funcionan muy bien, pero no explica por qué estaba buscando mi intento de una respuesta completa:

¿Por qué?

Los programas que sincronizan archivos como dropbox, git, etc. usan inotify para notar cambios en el sistema de archivos. El límite se puede ver por -

cat /proc/sys/fs/inotify/max_user_watches

Para mí, muestra 100000 . Cuando este límite no es suficiente para monitorear todos los archivos dentro de un directorio, arroja este error.


Aumento de la cantidad de observadores de inotify (versión corta):

Si está ejecutando Debian, RedHat u otra distribución similar de Linux , ejecute lo siguiente en una terminal:

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

Si está ejecutando ArchLinux , ejecute el siguiente comando en su lugar (vea aquí por qué):

echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

Luego pégalo en tu terminal y presiona Enter para ejecutarlo.


Detalles técnicos:

Listen usa inotify por defecto en Linux para monitorear los directorios en busca de cambios. No es raro encontrar un límite del sistema en la cantidad de archivos que puede monitorear. Por ejemplo, el límite de inotify de Ubuntu Lucid (64 bits) está establecido en 8192.

Puede obtener su límite actual de observación de archivos inotify ejecutando:

$ cat /proc/sys/fs/inotify/max_user_watches

Cuando este límite no es suficiente para monitorear todos los archivos dentro de un directorio, se debe aumentar el límite para que Listen funcione correctamente.

Puede establecer un nuevo límite temporal con:

$ sudo sysctl fs.inotify.max_user_watches=524288
$ sudo sysctl -p

Si desea que su límite sea permanente, use:

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

Es posible que también deba prestar atención a los valores de max_queued_events y max_user_instances si Listen sigue quejándose.

Fuente: https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers

Aniket Thakur
fuente
3

Puede verificar el límite existente y, en función de eso, puede modificarlo según sus requisitos

To Check : cat /proc/sys/fs/inotify/max_user_watches To Alter : sudo sysctl fs.inotify.max_user_watches=524288

Esto resolverá el error.

Patel Nikhil
fuente