Benutzerlimit für inotify-Uhren unter Ubuntu 16.04 erreicht

43

Ich habe gerade Ubuntu 16.04 installiert und bekomme diese Warnung, wenn ich SmartGit starte :

IOException: User limit of inotify watches reached

Außerdem bekomme ich folgende Warnung tail -f:

tail: inotify resources exhausted 

tail: inotify cannot be used, reverting to polling

Ich bekomme diesen Fehler nie mit Ubuntu 14.04 und die Anwendungen und Dateien, die ich auf dem neuen Ubuntu verwende, sind ziemlich die gleichen, die ich in der vorherigen Version verwendet habe.

Die einzigen relevanten Unterschiede sind, dass ich eine zusätzliche Festplatte auf dem PC hinzugefügt und das Ubuntu-Backup-Tool konfiguriert habe. Kann dieses Problem mit einem zweiten Datenträger oder mit dem Sicherungstool zusammenhängen?

Andrea
quelle

Antworten:

76

Die aktuelle Standardeinstellung für Xenial ist 8192 (siehe fs / notify / inotify / inotify_user.c in der Kernelquelle). Sie können dies überprüfen, indem Sie die Datei auf stdout drucken:

cat /proc/sys/fs/inotify/max_user_watches
8192

Sie können die Zahl erhöhen, indem Sie sie beispielsweise auf 16384 verdoppeln, indem Sie Folgendes verwenden:

echo 16384 | sudo tee /proc/sys/fs/inotify/max_user_watches

Denken Sie daran, dass inotify-Uhren Speicher verbrauchen. Ich denke, es sind ungefähr 160 Bytes pro Uhr auf 64-Bit-Systemen.

Um dies dauerhaft festzulegen, fügen Sie einen Eintrag zu /etc/sysctl.conf hinzu, zum Beispiel:

echo fs.inotify.max_user_watches=16384 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

..oder manuell bearbeiten /etc/sysctl.conf(Sie benötigen Root-Rechte, um es zu aktualisieren) und dann ausführensudo sysctl -p

Colin Ian King
quelle
Ja Dankeschön. Ich habe es verdoppelt und jetzt habe ich keine Warnungen mehr. Wie viel Speicher (maximal) wird für 16.384 Uhren verbraucht? Meine Berechnungen geben mir mehr oder weniger 2,5 MB . Ist es richtig?
Andrea
Etwas in dieser Reihenfolge plus etwas Aufwand; Es ist nicht zu groß im großen Schema der Sache.
Colin Ian King
Hier einige weitere Informationen zum möglichen Speicherverbrauch von (gebrauchten) Uhren: askubuntu.com/questions/154255/…
michael
11

Die obigen Antworten funktionieren prima, aber es erklärt nicht, warum ich mich hier umgesehen habe, um eine vollständige Antwort zu erhalten.

Warum?

Programme, die Dateien wie Dropbox, Git usw. synchronisieren, verwenden inotify, um Änderungen am Dateisystem festzustellen. Die Grenze kann durch gesehen werden -

cat /proc/sys/fs/inotify/max_user_watches

Für mich zeigt es 100000 . Wenn dieses Limit nicht ausreicht, um alle Dateien in einem Verzeichnis zu überwachen, wird dieser Fehler ausgegeben.


Anzahl der inotify-Beobachter erhöhen (Kurzversion):

Wenn Sie Debian, RedHat oder eine andere ähnliche Linux-Distribution ausführen, führen Sie Folgendes in einem Terminal aus:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Wenn Sie ArchLinux ausführen, führen Sie stattdessen den folgenden Befehl aus (siehe hier, warum):

echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

Fügen Sie es dann in Ihr Terminal ein und drücken Sie die Eingabetaste, um es auszuführen.


Technische Details:

Listen verwendet standardmäßig inotify unter Linux, um Verzeichnisse auf Änderungen zu überwachen. Es ist nicht ungewöhnlich, dass die Anzahl der Dateien, die Sie überwachen können, auf ein Systemlimit begrenzt wird. Beispielsweise ist das Inotify-Limit von Ubuntu Lucid (64 Bit) auf 8192 festgelegt.

Sie können das aktuelle Überwachungslimit für Inotify-Dateien ermitteln, indem Sie Folgendes ausführen:

$ cat /proc/sys/fs/inotify/max_user_watches

Wenn dieses Limit nicht ausreicht, um alle Dateien in einem Verzeichnis zu überwachen, muss es erhöht werden, damit Listen ordnungsgemäß funktioniert.

Sie können ein neues Limit vorübergehend festlegen mit:

$ sudo sysctl fs.inotify.max_user_watches=524288
$ sudo sysctl -p

Wenn Sie Ihr Limit dauerhaft festlegen möchten, verwenden Sie:

$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p

Möglicherweise müssen Sie auch auf die Werte von max_queued_events und max_user_instances achten, wenn sich Listen weiterhin beschwert.

Quelle: https://github.com/guard/listen/wiki/Erhöhen-der-Anzahl-der-Melder

Aniket Thakur
quelle
3

Sie können das vorhandene Limit überprüfen und es basierend auf Ihren Anforderungen ändern

To Check : cat /proc/sys/fs/inotify/max_user_watches To Alter : sudo sysctl fs.inotify.max_user_watches=524288

Dadurch wird der Fehler behoben.

Patel Nikhil
quelle