57 votes

Comment puis-je savoir si je n'ai plus de montres inotify ?

J'utilise une application qui consomme des montres inotify. J'ai déjà réglé

fs.inotify.max_user_watches=32768

sur /etc/sysctl.conf mais la nuit dernière, l'application a cessé d'indexer à moins que je ne l'exécute manuellement, ce qui m'amène à penser que je suis en panne de montres.

Comme je ne sais pas quel est le compromis à faire lorsque j'augmente ce nombre (consomme-t-il plus de RAM ?), je ne sais pas si je dois simplement augmenter ce nombre. J'aimerais donc savoir s'il existe un moyen de savoir s'il utilise toutes ces montres et quels sont les compromis à faire pour l'augmenter.

73voto

ish Points 134738

Comment savoir si vous êtes à court de montres ? queue le dira !

  • Début 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 ; abandonnez avec Ctrl-C.
    • Si vous n'avez plus de montres il échouera avec ceci erreur quelque peu cryptique : tail: cannot watch '/var/log/dmsg': No space left on device

Pour les curieux : Pourquoi le queue un "telltail" ?

  • En fait, tout application bien écrite devrait avoir la courtoisie de vous le dire, puisque la inotify L'API/les appels leur indiquent clairement de quoi il s'agit.

  • Essayez strace tail -f ... à la place, et lorsqu'il réussit, il se termine par : inotify_add_watch(4, "/var/log/dmesg", IN_MODIFY...) \= 1

  • mais s'il échoue, c'est-à-dire que vous n'avez plus de montres il dira : inotify_add_watch(4, "/var/log/dmesg", IN_MODIFY..) \= -1 ENOSPC (No space left on device)

Pouvez-vous augmenter les montres ? De combien ? Des compromis ?

Réponse courte : Bien sûr, pas de problème. Passez directement à un demi-million (524288) si vous voulez...la mémoire supplémentaire utilisée devrait être négligeable sur un système moderne avec plus de 4 Go de mémoire.

  • Chaque utilisé inotify watch occupe 540 octets (système 32 bits), ou 1 kB (double - sur 64 bits) [sources : 1 , 2 ]
  • Cela vient de Mémoire du noyau qui n'est pas remplaçable.
  • Donc, en supposant que vous ayez fixé le maximum à 524288, et que tous soient utilisés (improbable), vous utiliseriez environ 256MB/512MB de mémoire noyau 32-bit/64-bit

    • Notez que votre application utilisera également de la mémoire supplémentaire pour garder la trace des handles inotify, des chemins de fichiers/répertoires, etc. -- la quantité dépend de sa conception.
  • Quelle est la valeur maximale ? Je suppose qu'aucune, en théorie, tant que vous avez assez de RAM. En pratique, 524288 a été officiellement recommandé par les apps et les gens ont été en le fixant à 2 millions avec l'utilisation de la mémoire qui va avec, bien sûr.

13voto

Bruno Pereira Points 70510

Je ne sais pas si je dois juste augmenter ce nombre

Le moyen le plus simple de vérifier si vous avez atteint votre max_user_watches est, avec votre utilisateur, d'utiliser inotifywatch de l'emballage inotify-tools et vérifiez si vous pouvez toujours collecter des informations à partir d'un fichier.

Par exemple inotifywatch -v /home/bruno/.profile pour moi revient :

Establishing watches...
Total of 1 watches.
Finished establishing watches, now collecting statistics.

Alors inotify n'a aucun problème pour créer une nouvelle montre, aucun problème ici.

Si vous avez atteint votre limite maximale dans les montres inotify, il retournera quelque chose comme

Failed to watch /home/bruno/.profile; upper limit on inotify watches reached!

Si vous voyez quelque chose comme ça, vous avez atteint la limite et vous devrez augmenter la limite de montres autorisées.

Consomme-t-il plus de RAM ?

Oui, c'est vrai. Mais selon cette ancien article la quantité qu'il consomme est minime par rapport aux autres aspects d'un ordinateur de bureau en fonctionnement.

-- UTILISATION DE LA MÉMOIRE

Les structures de données inotify sont légères :

La montre inotify est de 40 octets inotify device est de 68 octets inotify event est de 272 octets

Donc, en supposant qu'un dispositif a 8192 montres, les structures vont seulement consommeront seulement 320 Ko de mémoire. Avec un nombre maximum de 8 dispositifs autorisés à exister à la fois, cela ne représente que 2,5 Mo de mémoire.

Chaque dispositif peut également avoir 256 événements en file d'attente à un moment donné. 68KB par dispositif. Et seulement 0,5 Mo si tous les périphériques sont ouverts et ont une file d'attente d'événements complète.

Ainsi, environ 3 Mo de mémoire sont utilisés dans le système de gestion de l'information. tout est ouvert et plein.

Chaque montre inotify épingle l'inode d'un direct la taille d'un inode est différente selon le système de fichiers mais supposons que qu'il est de 512 byes.

Donc, en supposant que le nombre maximum de montres globales soit actif, cela donnerait 32 Mo d'inodes dans le cache des inodes. Encore une fois, ce n'est pas un problème sur un système moderne.

Je suppose bien sûr que les choses n'ont pas beaucoup changé depuis que l'article a été écrit, mais au vu des chiffres, je ne m'inquiéterais pas et l'augmentation de la limite n'augmentera pas beaucoup la consommation de RAM.


Postes connexes sur inotify

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