web-dev-qa-db-fra.com

Limite d'utilisateurs atteinte par les montres inotify atteinte sous Ubuntu 16.04

Je viens d'installer Ubuntu 16.04 et je reçois cet avertissement au démarrage SmartGit :

IOException: User limit of inotify watches reached

De plus, je reçois cet avertissement en lançant tail -f:

tail: inotify resources exhausted 

tail: inotify cannot be used, reverting to polling

Je n'ai jamais eu cette erreur avec Ubuntu 14.04 et les applications et les fichiers que j'utilise sur le nouvel Ubuntu sont tout à fait les mêmes que ceux que j'utilisais dans la version précédente.

Les seules différences pertinentes sont que j'ai ajouté un disque dur supplémentaire sur le PC et que j'ai configuré l'outil de sauvegarde Ubuntu. Ce problème peut-il être lié à un deuxième disque ou à l'outil de sauvegarde?

36
Andrea

La valeur par défaut actuelle sur Xenial est 8192 (voir fs/notify/inotify/inotify_user.c dans la source du noyau), vous pouvez le vérifier en imprimant le fichier sur la sortie standard:

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

Vous pouvez augmenter le nombre, par exemple en le doublant à 16384, en utilisant:

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

n'oubliez pas que les montres inotify consomment de la mémoire. Je pense qu'il s'agit d'environ 160 octets par montre sur les systèmes 64 bits.

Pour le définir de manière permanente, ajoutez une entrée à /etc/sysctl.conf, par exemple:

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

..ou éditez manuellement /etc/sysctl.conf (vous devez disposer des privilèges root pour le mettre à jour), puis exécutez Sudo sysctl -p

67
Colin Ian King

Les réponses ci-dessus fonctionnent très bien, mais cela n'explique pas pourquoi je cherchais ici ma tentative de réponse complète -

Pourquoi?

Les programmes qui synchronisent des fichiers tels que dropbox, git, etc. utilisent inotify pour noter les modifications apportées au système de fichiers. La limite peut être vue par -

cat /proc/sys/fs/inotify/max_user_watches

Pour moi, cela montre 100000 . Lorsque cette limite n'est pas suffisante pour surveiller tous les fichiers d'un répertoire, cette erreur est générée.


Augmenter le nombre d'observateurs inotify (version courte):

Si vous utilisez Debian, RedHat ou une autre distribution Linux similaire , exécutez la commande suivante dans un terminal:

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

Si vous utilisez ArchLinux , exécutez la commande suivante à la place (voir ici pour savoir pourquoi):

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

Ensuite, collez-le dans votre terminal et appuyez sur Entrée pour l'exécuter.


Détails techniques:

Listen utilise par défaut inotify sous Linux pour surveiller les modifications apportées aux répertoires. Il n'est pas rare de rencontrer une limite système sur le nombre de fichiers que vous pouvez surveiller. Par exemple, la limite d'inotify d'Ubuntu Lucid (64 bits) est définie sur 8192.

Vous pouvez obtenir votre limite actuelle de surveillance de fichiers inotify en exécutant:

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

Lorsque cette limite n'est pas suffisante pour surveiller tous les fichiers d'un répertoire, vous devez augmenter la limite pour que Listen puisse fonctionner correctement.

Vous pouvez définir une nouvelle limite temporaire avec:

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

Si vous souhaitez rendre votre limite permanente, utilisez:

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

Vous devrez peut-être également prêter attention aux valeurs de max_queued_events et max_user_instances si Listen continue à se plaindre.

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

7
Aniket Thakur

Vous pouvez vérifier la limite existante et sur cette base, vous pouvez la modifier selon vos besoins.

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

Cela résoudra l'erreur.

3
Patel Nikhil