Достигнут пользовательский лимит на часы inotify в Ubuntu 16.04

43

Я только что установил Ubuntu 16.04 и получаю это предупреждение при запуске SmartGit :

IOException: User limit of inotify watches reached

Более того, я получаю это предупреждение при запуске tail -f:

tail: inotify resources exhausted 

tail: inotify cannot be used, reverting to polling

Я никогда не получаю эту ошибку с Ubuntu 14.04, и приложения и файлы, которые я использую в новой Ubuntu, совершенно такие же, как и в предыдущей версии.

Единственное существенное отличие состоит в том, что я добавил дополнительный жесткий диск на ПК и настроил инструмент резервного копирования Ubuntu. Может ли эта проблема быть связана со вторым диском или с инструментом резервного копирования?

Andrea
источник

Ответы:

76

Текущее значение по умолчанию для Xenial - 8192 (см. Fs / notify / inotify / inotify_user.c в исходном коде ядра), вы можете убедиться в этом, напечатав файл в stdout:

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

Вы можете увеличить число, например, удвоив это значение до 16384, используя:

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

Имейте в виду, что часы Inotify действительно занимают память, я думаю, что это составляет около 160 байт на часы в 64-битных системах.

Чтобы установить это навсегда, добавьте запись в /etc/sysctl.conf, например:

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

.. или отредактируйте вручную /etc/sysctl.conf(вам нужны права root для его обновления), а затем запуститеsudo sysctl -p

Колин Ян Кинг
источник
Да спасибо. Я удвоил его, и теперь у меня больше нет предупреждений. Сколько памяти (при макс.) Будет использовано для 16,384 часов? Мои расчеты дают мне более или менее 2,5 МБ . Это правильно?
Андреа
Что-то в этом порядке, плюс некоторые накладные расходы; это не слишком велико в грандиозной схеме вещей.
Колин Ян Кинг
вот еще некоторая информация о возможном потреблении памяти (использованных) часов askubuntu.com/questions/154255/…
майкл
11

Вышеприведенные ответы работают отлично, но это не объясняет, почему я пытался найти здесь полный ответ -

Зачем?

Программы, которые синхронизируют файлы, такие как dropbox, git и т. Д., Используют inotify, чтобы заметить изменения в файловой системе. Предел можно увидеть по -

cat /proc/sys/fs/inotify/max_user_watches

Для меня это показывает 100000 . Если этого ограничения недостаточно для отслеживания всех файлов в каталоге, он выдает эту ошибку.


Увеличение количества наблюдателей inotify (короткая версия):

Если вы используете Debian, RedHat или другой подобный дистрибутив Linux , запустите следующее в терминале:

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

Если вы используете ArchLinux , выполните следующую команду (см. Здесь, почему):

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

Затем вставьте его в свой терминал и нажмите Enter, чтобы запустить его.


Технические подробности:

Listen использует inotify по умолчанию в Linux для отслеживания изменений в каталогах. Нередко встречается системное ограничение на количество файлов, которые вы можете отслеживать. Например, предел inotify Ubuntu Lucid (64 бита) установлен равным 8192.

Вы можете получить текущий предел просмотра файлов inotify, выполнив:

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

Если этого предела недостаточно для мониторинга всех файлов в каталоге, для правильной работы Listen необходимо увеличить предельное значение.

Вы можете установить новый лимит временно с помощью:

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

Если вы хотите сделать свой лимит постоянным, используйте:

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

Вам также может понадобиться обратить внимание на значения max_queued_events и max_user_instances, если Listen продолжает жаловаться.

Источник: https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers

Аникет Тхакур
источник
3

Вы можете проверить существующий лимит и на основании этого вы можете изменить его в соответствии с вашими требованиями

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

Это устранит ошибку.

Патель Нихил
источник