60 votes

Limite d'utilisateur des montres inotify atteinte sur Ubuntu 16.04

Je viens d'installer Ubuntu 16.04 et j'obtiens cet avertissement quand je démarre 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 fichiers que j'utilise sur la nouvelle 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 d'Ubuntu. Ce problème peut-il être lié à un deuxième disque ou à l'outil de sauvegarde ?

98voto

Colin Ian King Points 16984

Le défaut actuel sur Xenial est 8192 (voir fs/notify/inotify/inotify_user.c dans les sources du noyau), vous pouvez le vérifier en imprimant le fichier sur stdout :

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

Gardez à l'esprit que les montres inotify consomment de la mémoire, je pense que c'est environ 160 octets par montre sur les systèmes 64 bits.

Pour définir ce paramètre de façon permanente, ajoutez une entrée au fichier /etc/sysctl.conf, par exemple :

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

ou modifier manuellement /etc/sysctl.conf (vous avez besoin des privilèges de root pour le mettre à jour) et ensuite exécuter sudo sysctl -p

26voto

Aniket Thakur Points 4087

Les réponses ci-dessus fonctionnent très bien, mais elles n'expliquent pas pourquoi, ce que je cherchais à faire ici pour tenter une réponse complète.

Pourquoi ?

Les programmes qui synchronisent les fichiers tels que dropbox, git, etc. utilisent inotify pour remarquer les changements dans le 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 se produit.


Augmenter le nombre de surveillants inotify (version courte) :

Si vous exécutez Debian, RedHat, ou une autre distribution Linux similaire exécutez ce qui suit dans un terminal :

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

Si vous exécutez 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

Puis collez-le dans votre terminal et appuyez sur entrée pour l'exécuter.


Détails techniques :

Listen utilise inotify par défaut sous Linux pour surveiller les changements dans les 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 inotify d'Ubuntu Lucid (64bit) est fixée à 8192.

Vous pouvez obtenir votre limite actuelle de surveillance du fichier 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, elle doit être augmentée pour que Listen fonctionne correctement.

Vous pouvez fixer 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 aussi faire attention aux valeurs de max_queued_events et max_user_instances si Listen continue à se plaindre.

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

3voto

Patel Nikhil Points 31

Vous pouvez vérifier la limite existante et la modifier en fonction de vos besoins.

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

Cela permettra de résoudre l'erreur.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X