Osiągnięty limit użytkowników zegarków inotify w systemie Ubuntu 16.04


43

Właśnie zainstalowałem Ubuntu 16.04 i pojawia się to ostrzeżenie po uruchomieniu SmartGit :

IOException: User limit of inotify watches reached

Ponadto otrzymuję to ostrzeżenie tail -f:

tail: inotify resources exhausted 

tail: inotify cannot be used, reverting to polling

Nigdy nie pojawia się ten błąd w systemie Ubuntu 14.04, a aplikacje i pliki, których używam w nowym Ubuntu, są takie same, jak w poprzedniej wersji.

Jedyne istotne różnice polegają na tym, że dodałem dodatkowy dysk twardy na komputerze i skonfigurowałem narzędzie do tworzenia kopii zapasowych Ubuntu. Czy ten problem może być związany z drugim dyskiem lub narzędziem do tworzenia kopii zapasowych?


Odpowiedzi:


76

Obecne domyślne ustawienie dla Xenial to 8192 (patrz fs / powiadomienie / inotify / inotify_user.c w źródle jądra), możesz to sprawdzić, drukując plik na standardowe wyjście:

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

Możesz zwiększyć liczbę, na przykład podwajając ją do 16384, używając:

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

pamiętaj, że zegarki inotify zużywają pamięć, myślę, że w systemach 64-bitowych na zegarek przypada około 160 bajtów.

Aby ustawić to na stałe, dodaj wpis do /etc/sysctl.conf, na przykład:

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

.. lub ręcznie edytuj /etc/sysctl.conf(potrzebujesz uprawnień roota, aby go zaktualizować), a następnie uruchomsudo sysctl -p


Tak dziękuję. Podwoiłem go i teraz nie mam już ostrzeżeń. Ile pamięci (maksymalnie) zostanie zużyte na 16.384 zegarków? Moje obliczenia dają mi mniej więcej 2,5 MB . Czy to jest poprawne?
Andrea,

Coś w tej kolejności plus trochę kosztów ogólnych; nie jest zbyt duży w wielkim schemacie rzeczy.
Colin Ian King

oto więcej informacji na temat możliwego zużycia pamięci (używanych) zegarków askubuntu.com/questions/154255/…
michael

11

Powyższe odpowiedzi działają świetnie, ale nie wyjaśnia, dlaczego tu się rozejrzałem, moja próba uzyskania pełnej odpowiedzi -

Dlaczego?

Programy synchronizujące pliki, takie jak dropbox, git itp., Używają inotify do zauważenia zmian w systemie plików. Limit można zobaczyć przez -

cat /proc/sys/fs/inotify/max_user_watches

Dla mnie pokazuje 100000 . Gdy ten limit nie wystarczy do monitorowania wszystkich plików w katalogu, zgłasza ten błąd.


Zwiększanie liczby obserwatorów inotify (wersja skrócona):

Jeśli korzystasz z Debiana, RedHata lub innej podobnej dystrybucji Linuksa , uruchom następujące polecenie w terminalu:

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

Jeśli korzystasz z ArchLinux , uruchom zamiast tego następujące polecenie (zobacz tutaj, dlaczego):

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

Następnie wklej go do terminala i naciśnij klawisz Enter, aby go uruchomić.


Szczegóły techniczne:

Listen używa domyślnie inotify w systemie Linux do monitorowania katalogów pod kątem zmian. Często zdarza się, że system ogranicza liczbę plików, które można monitorować. Na przykład limit informowania Ubuntu Lucid (64-bitowy) jest ustawiony na 8192.

Możesz uzyskać bieżący limit oglądania pliku inotify, wykonując:

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

Jeśli ten limit nie wystarczy do monitorowania wszystkich plików w katalogu, należy go zwiększyć, aby funkcja Listen działała poprawnie.

Możesz ustawić nowy limit tymczasowy za pomocą:

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

Jeśli chcesz ustawić swój limit na stałe, użyj:

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

Być może będziesz musiał zwrócić uwagę na wartości max_queued_events i max_user_instances, jeśli Listen nadal narzeka.

Źródło: https://github.com/guard/listen/wiki/Increase-the-amount-of-inotify-watchers


3

Możesz sprawdzić istniejący Limit i na jego podstawie możesz go zmienić zgodnie ze swoimi wymaganiami

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

To rozwiąże błąd.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.