tail: inotify kann nicht verwendet werden. Wiederherstellen der Abfrage: Zu viele geöffnete Dateien

16

Wenn ich es versuche tail -f catalina.out, erhalte ich den Fehler:

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

Ich habe die Antwort in diesem Beitrag ausprobiert: Zu viele offene Dateien - wie man den Täter findet

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

Als ich den obigen Befehl ausgeführt habe, war die Ausgabe

17 6115

13 6413

10 6417

10 6415

9 6418

9 6416

9 6414

8 6419

4 9 

4 8

Ich sehe keinen Prozess, bei dem 1024 Dateien geöffnet sind. Ist die Anzahl der geöffneten Dateien nicht 17,13,10,10,9? Oder verstehe ich das falsch? Und alle diese waren Bash, SSHD, Apache2, Tomcat hatte Nummer 4.

Ich habe auch lsof | grep tail | wc -l was zurückgegeben 20. Diese Zahlen sind nicht riesig, warum tail -f catalina.outscheitert das?

gbag
quelle

Antworten:

17

Dies wurde für mich gelöst, indem ich den Anweisungen auf http://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exhausted.html folgte

Permanente Lösung (über Neustarts hinweg beibehalten) Hinzufügen von Zeile:

fs.inotify.max_user_watches=1048576

zu:

/etc/sysctl.conf

Grenzwert dauerhaft festgelegt (auch zwischen Neustarts).

dann mache a

sysctl -p
Elan Hasson
quelle
1
Das Erhöhen der Dateideskriptoren hilft mir nicht. Meine tailBotschaft war etwas anders: tail: inotify resources exhausted. Diese Antwort hat mir geholfen. Sie können auch sudo sysctl -w fs.inotify.max_user_watches=1048576 && sysctl -ptesten, ob dies hilft, ohne es dauerhaft zu ändern. Dieser Beitrag hilft auch nefaria.com/2014/08/tail-inotify-resources-exhausted
Ruslan Stelmachenko
9

Ich denke, dass die Antwort nicht vollständig ist (es sagt nichts über die maximale Anzahl der auf dem System geöffneten Dateien aus).

Bezüglich der maximalen Anzahl geöffneter Dateien gibt es zwei Grenzen:

  1. Maximale Anzahl offener Dateien pro Prozess .

    • Sie können den Wert dieses Grenzwerts anzeigen, indem Sie Folgendes verwenden: ulimit -n
    • Sie können dieses Limit folgendermaßen ändern: ulimit -n new_limit_number
    • Hier ist ein Befehl, um die Top-10-Prozesse mit vielen geöffneten Dateien abzurufen:

      lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head
  2. Maximale Anzahl offener Dateien pro System .

    • Sie können den Wert dieses Grenzwerts anzeigen, indem Sie Folgendes verwenden: cat /proc/sys/fs/file-max
    • Sie können dieses Limit folgendermaßen ändern: echo new_limit_number > /proc/sys/fs/file-max
    • Zählen Sie alle offenen Dateihandles: lsof | wc -l
Radu Rădeanu
quelle
6

Höchstwahrscheinlich sind Ihnen die inotifyUhren ausgegangen . Wahrscheinlich führen Sie einige Dateisynchronisierungstools (z. B. Dropbox) im Hintergrund aus?

Unter Linux verwendet die interne Implementierung von tail -fcommand standardmäßig den inotifyMechanismus, um Dateiänderungen zu überwachen. Wenn Ihnen alle inotifyÜberwachungen ausgehen (standardmäßig 8192), inotify -fmüssen Sie auf Abfragen umschalten, um Änderungen an dieser Datei zu erkennen.

Natürlich können Sie die maximale Anzahl der inotifyUhren ändern .

Referenz:
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-everwendet werden-reverting-to-polling-too-many-open-files

zeekvfu
quelle
3

sysctl fs.inotify.max_user_instanceswürde Limit pro User bekommen für inotify.

Ich habe es erlebt, und alle systemweiten Grenzwerte waren hoch genug, aber die Benutzereinstellungen sind normalerweise relativ niedrig. Sie können sie erhöhen sysctl.confund neu laden sysctl -p.

JBat
quelle
3

Lauf

ps aux | grep tail

um zu überprüfen, ob zu viele Tail-Befehle ausgeführt werden, z. B. ein Spawn von Crontab.

Tangxinfa
quelle
ha dies hat tatsächlich funktioniert, Schwanz viel zu viele Dateien
Alexander Mills
Wie übersetze ich die Daten? Können Sie erklären, was jede Information bedeutet und was Sie dagegen tun können? Zum Beispiel:root 20161 0.0 0.0 11132 1044 pts/0 S+ 17:27 0:00 grep tail
Christia
Dies ist nur dann ein Problem, wenn ZU VIELE Prozesse übereinstimmen. Die Zeile, deren Inhalt mit "grep" übereinstimmt, wird vom Befehl selbst generiert. Bitte verwenden Sie stattdessen den Befehl "pgrep tail".
Tangxinfa