В настоящее время я сталкиваюсь с проблемой в Linux, где в качестве пользователя root у меня есть команды, возвращающие ошибку, поскольку достигнут предел наблюдения inotify.
# tail -f /var/log/messages
[...]
tail: cannot watch '/var/log/messages': No space left on device
# inotifywatch -v /var/log/messages
Establishing watches...
Failed to watch /var/log/messages; upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via '/proc/sys/fs/inotify/max_user_watches'.`
Я немного погуглил, и каждое решение, которое я нашел, заключается в увеличении лимита с помощью:
sudo sysctl fs.inotify.max_user_watches=<some random high number>
Но я не смог найти никакой информации о последствиях повышения этой ценности. Я предполагаю, что значение ядра по умолчанию было установлено по причине, но это кажется неадекватным для определенных случаев использования. (например, при использовании Dropbox с большим количеством папок или программного обеспечения, которое отслеживает много файлов)
Итак, вот мои вопросы:
- Безопасно ли повышать это значение и каковы будут последствия слишком высокого значения?
- Есть ли способ узнать, какие часы установлены в данный момент и какой процесс позволяет им определить, не является ли достигнутый предел вызванным неисправным программным обеспечением?
Ответы:
Безопасно ли повышать это значение и каковы будут последствия слишком высокого значения?
Да, безопасно повысить это значение, и ниже указаны возможные затраты [ источник ]:
Чтобы проверить максимальное количество часов inotify:
Чтобы установить максимальное количество часов inotify
Временно:
sudo sysctl fs.inotify.max_user_watches=
с вашим предпочтительным значением в конце.Постоянно ( более подробная информация ):
fs.inotify.max_user_watches=524288
в настройках sysctl. В зависимости от вашей системы они могут находиться в одном из следующих мест:/etc/sysctl.conf
/etc/sysctl.d/
, например,/etc/sysctl.d/40-max-user-watches.conf
sysctl -p
(Debian / RedHat) илиsysctl --system
(Arch)Проверьте, было ли достигнуто максимальное количество часов inotify:
Используйте
tail
с параметром-f
(follow) для любого старого файла, напримерtail -f /var/log/dmesg
: - Если все хорошо, он покажет последние 10 строк и сделает паузу; прервать с помощью Ctrl-C - если у вас нет часов , он потерпит неудачу с этой несколько загадочной ошибкой :Чтобы увидеть, что использует часы Inotify
В первом столбце указано количество inotify fds (но не количество часов), а во втором - PID этого процесса [sources: 1 , 2 ].
источник
I guess very few codes need the values higher than the default
Dropbox может потребовать более высокий лимит, в зависимости от того, сколько у вас файлов. Iv'e поднял мой без проблем. на самом деле, уведомление о сбрасывании (которое происходит, когда оно достигает своего предела) явно указывает на его повышение./etc/sysctl.conf
/etc/sysctl.d
также работает на более новых системах на базе RedHat.