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

43

Je viens d'installer Ubuntu 16.04 et je reçois cet avertissement lorsque je lance SmartGit :

IOException: User limit of inotify watches reached

De plus, je reçois cet avertissement lors du lancement 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 importantes 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?

Andrea
la source

Réponses:

76

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 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

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 avez besoin des privilèges root pour le mettre à jour) puis exécutezsudo sysctl -p

Colin Ian King
la source
Oui merci. Je l'ai doublé et maintenant je n'ai plus d'avertissements. Combien de mémoire (au maximum) sera consommée pour 16.384 montres? Mes calculs me donnent plus ou moins 2.5MB . Est ce juste?
Andrea
Quelque chose dans cet ordre, plus des frais généraux;
Colin Ian King a dit: «
voici quelques informations supplémentaires sur la consommation de mémoire possible des montres (d'occasion) askubuntu.com/questions/154255/…
michael
11

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 100 000 . 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 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 (voir ici 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

Aniket Thakur
la source
3

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.

Patel Nikhil
la source