tail: inotify ne peut pas être utilisé, revenant à polling: Trop de fichiers ouverts

14

Quand j'essaie tail -f catalina.out, j'obtiens l'erreur:

tail: inotify cannot be used, reverting to polling: Too many open files 

J'ai essayé la réponse dans ce post: Trop de fichiers ouverts - comment trouver le coupable

lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head

Quand j'ai exécuté la commande ci-dessus, la sortie était

17 6115

13 6413

10 6417

10 6415

9 6418

9 6416

9 6414

8 6419

4 9 

4 8

Je ne vois aucun processus ayant 1024 fichiers ouverts. Le nombre de fichiers ouverts n'est-il pas 17,13,10,10,9? Ou est-ce que je comprends mal? Et tous ceux-ci étaient bash, sshd, apache2, tomcat avait le numéro 4.

J'ai aussi fait lsof | grep tail | wc -l qui est revenu 20. Ces chiffres ne sont pas énormes, alors pourquoi tail -f catalina.outéchouer?

gbag
la source

Réponses:

14

Cela a été résolu pour moi en suivant les instructions sur http://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exhausted.html

Solution permanente (préservée lors des redémarrages) Ajout d'une ligne:

fs.inotify.max_user_watches=1048576

à:

/etc/sysctl.conf

fixe la valeur limite en permanence (même entre les redémarrages).

alors fais un

sysctl -p
Elan Hasson
la source
L'augmentation des descripteurs de fichiers ne m'aide pas. Mon tailmessage était légèrement différent: tail: inotify resources exhausted. Cette réponse m'a aidé. Vous pouvez également utiliser sudo sysctl -w fs.inotify.max_user_watches=1048576 && sysctl -ppour tester si cela aide sans le modifier de manière permanente. Ce message aide également nefaria.com/2014/08/tail-inotify-resources-exhausted
Ruslan Stelmachenko
9

Je pense que cette réponse n’est pas complète (elle ne dit rien sur la limite maximale de fichiers ouverts sur le système).

Il existe deux limites concernant le nombre maximal de fichiers ouverts:

  1. Limite maximale de fichiers ouverts par processus .

    • Vous pouvez voir quelle est la valeur de cette limite en utilisant: ulimit -n
    • Vous pouvez changer cette limite en utilisant: ulimit -n new_limit_number
    • Voici une commande pour obtenir le top 10 des processus ayant de nombreux fichiers ouverts:

      lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head
  2. Limite maximale de fichiers ouverts par système .

    • Vous pouvez voir quelle est la valeur de cette limite en utilisant: cat /proc/sys/fs/file-max
    • Vous pouvez changer cette limite en utilisant: echo new_limit_number > /proc/sys/fs/file-max
    • Compter tous les descripteurs de fichiers ouverts: lsof | wc -l
Radu Rădeanu
la source
6

Très probablement, vous avez manqué de vos inotifymontres. Vous exécutez probablement des outils de synchronisation de fichiers (p. Ex. Dropbox) en arrière-plan?

Sous Linux, l’implémentation interne de la tail -fcommande utilise le inotifymécanisme par défaut pour surveiller les modifications de fichier. Si toutes les analyses sont épuisées inotify(8192 par défaut), vous inotify -fdevez passer en interrogation pour détecter les modifications apportées à ce fichier.

Bien sûr, vous pouvez modifier le nombre maximum de inotifymontres.

référence:
http://www.quora.com/How-is-tail-f-implemented
http://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exhausted.html
https: // serverfault.com/questions/510708/tail-inotify-cannot-be-used-reverting-to-polling-too-many-open-files

zeekvfu
la source
3

sysctl fs.inotify.max_user_instancesaurait limite par utilisateur pour inotify.

Je l'ai expérimenté et toutes les limites du système étaient suffisamment élevées, mais les paramètres définis par l'utilisateur sont généralement relativement faibles par défaut. Vous pouvez l'augmenter sysctl.confet le recharger sysctl -p.

JBat
la source
3

Courir

ps aux | grep tail

pour vérifier si trop de commandes de queue sont en cours d'exécution, comme un spawn par crontab.

Tangxinfa
la source
ha cela a vraiment fonctionné, beaucoup trop de fichiers
Alexander Mills
Comment traduire les données? Pouvez-vous expliquer ce que chaque information signifie et comment y remédier? Par exemple:root 20161 0.0 0.0 11132 1044 pts/0 S+ 17:27 0:00 grep tail
Christia
C'est un problème que si TOO MANY correspond, la ligne correspondante contient "grep" est générée par la commande elle-même. Veuillez utiliser la commande "pgrep tail" à la place.
tangxinfa le