Я использую приложение, которое потребляет часы inotify. Я уже установил
fs.inotify.max_user_watches=32768
в /etc/sysctl.conf
, но вчера вечером приложение прекратило индексирование, если я не запустил его вручную, что заставляет меня подозревать, что я вне часов.
Поскольку я не знаю, в чем заключается компромисс, когда я увеличиваю это число (оно потребляет больше оперативной памяти?), Я не знаю, стоит ли просто увеличивать это число, поэтому я бы хотел знаю, есть ли способ, которым я могу сказать, использует ли он все эти часы и каковы могут быть компромиссы для его увеличения.
Простой способ проверить, достигли ли вы значения max_user_watches
, с вашим пользователем - использовать inotifywatch
из пакета [ 114] и проверьте, можете ли вы по-прежнему собирать информацию из файла.
Например, inotifywatch -v /home/bruno/.profile
для меня возвращает:
Establishing watches...
Total of 1 watches.
Finished establishing watches, now collecting statistics.
Таким образом, inotify
не имеет проблем при создании новых часов, здесь нет проблем.
Если вы достигли своего максимального предела в часах inotify, он вернет что-то вроде
Failed to watch /home/bruno/.profile; upper limit on inotify watches reached!
Если вы увидите что-то подобное, значит, вы достигли предела и вам нужно будет увеличить допустимый лимит часов. [ 1120]
Да, это так. Но согласно этой старой статье количество, которое он потребляет, минимально по сравнению с другими аспектами работающего рабочего стола.
- ИСПОЛЬЗОВАНИЕ ПАМЯТИ -
Структуры данных inotify имеют малый вес:
Часы inotify - 40 байт, устройство inotify - 68 байт, событие inotify - 272 байта
Таким образом, предполагая, что устройство имеет 8192 часов, структуры будут использовать только 320 КБ памяти. Максимально допустимое количество одновременно существующих устройств - 8, но это по-прежнему всего 2,5 МБ.
Каждое устройство может также иметь 256 событий в очереди за раз, что составляет 68 КБ на устройство. И только 0,5 МБ, если все устройства открыты и имеют полную очередь событий.
Таким образом, примерно 3 МБ памяти используется в редких случаях, когда все открыто и заполнено.
Каждое средство наблюдения inotify выводит inode каталога / файла в памяти, размер inode для файловой системы различен, но давайте предположим, что он составляет 512 байтов.
Таким образом, предполагая, что максимальное количество глобальных наблюдений является активным, это будет определять 32 МБ инодов в кэше инодов. Опять не проблема в современной системе.
blockquote>Я, конечно, предполагаю, что вещи не сильно изменились с тех пор, как была написана статья, но, глядя на цифры, я бы не волновался, и увеличение лимита не сильно увеличит потребление ОЗУ.
Похожие посты о
inotify
tail
с опцией -f
(следовать) для любого старого файла, например, tail -f /var/log/dmesg
: tail: cannot watch '/var/log/dmsg': No space left on device
Для любопытных: почему хвост является «хвостиком»?
strace tail -f ...
, и когда это удастся, оно заканчивается: inotify_add_watch(4, "/var/log/dmesg", IN_MODIFY...) = 1
inotify_add_watch(4, "/var/log/dmesg", IN_MODIFY..) = -1 ENOSPC (No space left on device)
Краткий ответ: Конечно, нет пота. Если хотите, переходите к полумиллиону (524288) ... используемая дополнительная память должна быть незначительной в современной системе с 4 ГБ + памяти.
Итак, предполагая, что вы установили максимум на 524288, и все были использованы (маловероятно), вы бы использовали прибл. 256 МБ / 512 МБ 32-битной / 64-битной памяти ядра
Какое максимальное значение? Я думаю, нет, теоретически, если у вас достаточно оперативной памяти. На практике 524288 официально рекомендовано приложениями , и люди установили его на 2 миллиона , с соответствующим использованием памяти, конечно.
]