Ist es sicher, diesen Wert zu erhöhen, und was wären die Folgen eines zu hohen Werts?
Ja, es ist sicher, diesen Wert zu erhöhen, und unten sind die möglichen Kosten aufgeführt [Quelle]:
- Jeder gebraucht inotify watch benötigt 540 Bytes (32-Bit-System) oder 1 kB (Double - auf 64-Bit) [Quellen:1, 2]
- Dies kommt aus dem Kernelspeicher , die nicht austauschbar ist.
- Angenommen, Sie setzen das Maximum auf 524288 und alle wurden verwendet (unwahrscheinlich), würden Sie ungefähr 256 MB/512 MB 32-Bit-/64-Bit-Kernelspeicher verwenden.
- Beachten Sie, dass Ihre Anwendung auch zusätzlichen Speicher benötigt, um die Inotify-Handles, Datei-/Verzeichnispfade usw. zu verfolgen – wie viel hängt von ihrem Design ab.
So überprüfen Sie die maximale Anzahl an Inotify-Überwachungen:
cat /proc/sys/fs/inotify/max_user_watches
So stellen Sie die maximale Anzahl von Inotify-Überwachungen ein
Vorübergehend:
- Führen Sie
sudo sysctl fs.inotify.max_user_watches=
aus mit Ihrem bevorzugten Wert am Ende.
Dauerhaft (nähere Infos):
- geben Sie
fs.inotify.max_user_watches=524288
ein in Ihre Sysctl-Einstellungen. Abhängig von Ihrem System können sie sich an einem der folgenden Orte befinden:- Debian/RedHat:
/etc/sysctl.conf
- Arch:lege eine neue Datei in
/etc/sysctl.d/
, z.B./etc/sysctl.d/40-max-user-watches.conf
- Debian/RedHat:
- Möglicherweise möchten Sie die sysctl-Einstellungen neu laden, um einen Neustart zu vermeiden:
sysctl -p
(Debian/RedHat) odersysctl --system
(Bogen)
Überprüfen Sie, ob die maximale Anzahl an Inotify-Überwachungen erreicht wurde:
Verwenden Sie tail
mit dem -f
(Folgen)-Option für eine beliebige alte Datei, z. tail -f /var/log/dmesg
:- Wenn alles in Ordnung ist, werden die letzten 10 Zeilen angezeigt und eine Pause eingelegt; Abbrechen mit Strg-C- Wenn Sie keine Uhren mehr haben , wird es mit diesem etwas kryptischen Fehler fehlschlagen:
tail: cannot watch '/var/log/dmsg': No space left on device
Um zu sehen, was Inotify-Uhren verbraucht
find /proc/*/fd -lname anon_inode:inotify |
cut -d/ -f3 |
xargs -I '{}' -- ps --no-headers -o '%p %U %c' -p '{}' |
uniq -c |
sort -nr
Die erste Spalte zeigt die Anzahl der inotify fds (allerdings nicht die Anzahl der Watches) und die zweite zeigt die PID dieses Prozesses [Quellen:1, 2].