Est-il prudent d'augmenter cette valeur et quelles seraient les conséquences d'une valeur trop élevée ?
Oui, il est prudent d'augmenter cette valeur et voici les coûts possibles [source] :
- Chaque utilisé inotify watch occupe 540 octets (système 32 bits), ou 1 ko (double - sur 64 bits) [sources :1, 2]
- Ceci provient de la mémoire du noyau , qui ne peut pas être échangé.
- En supposant que vous définissiez le maximum à 524 288 et que tous soient utilisés (improbable), vous utiliseriez environ 256 Mo/512 Mo de mémoire du noyau 32 bits/64 bits.
- Notez que votre application utilisera également de la mémoire supplémentaire pour garder une trace des descripteurs inotify, des chemins de fichiers/répertoires, etc. -- combien dépend de sa conception.
Pour vérifier le nombre maximum de montres inotify :
cat /proc/sys/fs/inotify/max_user_watches
Pour définir le nombre maximum de montres inotify
Temporairement :
- Exécuter
sudo sysctl fs.inotify.max_user_watches=
avec votre valeur préférée à la fin.
En permanence (informations plus détaillées) :
- mettre
fs.inotify.max_user_watches=524288
dans vos paramètres sysctl. Selon votre système, ils peuvent se trouver à l'un des emplacements suivants :- Debian/RedHat :
/etc/sysctl.conf
- Arch :placez un nouveau fichier dans
/etc/sysctl.d/
, par exemple./etc/sysctl.d/40-max-user-watches.conf
- Debian/RedHat :
- vous souhaiterez peut-être recharger les paramètres sysctl pour éviter un redémarrage :
sysctl -p
(Debian/RedHat) ousysctl --system
(Arche)
Vérifiez si le nombre maximum de montres inotify a été atteint :
Utilisez tail
avec le -f
(suivre) sur n'importe quel ancien fichier, par ex. tail -f /var/log/dmesg
:- Si tout va bien, il affichera les 10 dernières lignes et fera une pause ; annuler avec Ctrl-C- Si vous n'avez plus de montres , il échouera avec cette erreur quelque peu énigmatique :
tail: cannot watch '/var/log/dmsg': No space left on device
Pour voir ce qui utilise les montres inotify
find /proc/*/fd -lname anon_inode:inotify |
cut -d/ -f3 |
xargs -I '{}' -- ps --no-headers -o '%p %U %c' -p '{}' |
uniq -c |
sort -nr
La première colonne indique le nombre de fds inotify (mais pas le nombre de veilles) et la seconde indique le PID de ce processus [sources :1, 2].