Что такое разумное количество часов inotify с Linux? - PullRequest
37 голосов
/ 11 февраля 2009

Я работаю над демоном, который отслеживает файловые события с помощью inotify, чтобы инициировать различные типы событий при доступе к файлам. Я читал, что часы стоят немного дороже, потому что Ядро хранит полный путь к каждому просматриваемому файлу.

Сколько часов будет слишком много?

Редактировать: В основном мне интересно ... Вы когда-нибудь видели заметный удар по производительности, если да, то на скольких часах это произошло? Да, я должен контролировать / рекурсивно (однако это минимальная система начальной загрузки).

Ответы [ 5 ]

24 голосов
/ 11 февраля 2009

Системные ограничения можно найти, прочитав /proc/sys/fs/inotify/max_user_instances (максимальное количество объектов inotify ") и /proc/sys/fs/inotify/max_user_watches (максимальное количество просматриваемых файлов), поэтому, если вы превысите эти цифры, их будет слишком много ;-) Максимум количество часов, как правило, составляет несколько десятков тысяч или больше - в моей системе, 262143 - что, вероятно, больше, чем вам когда-либо нужно, если вы не пытаетесь просмотреть каждый файл в файловой системе, но вам не следует этого делать , Я бы сказал, просто старайтесь не использовать больше часов inotify, чем вам нужно, и не беспокойтесь об этом, если вы не заметите значительное снижение производительности.

22 голосов
/ 17 августа 2011

AFAIK ядро ​​хранит не путь, а индекс. Тем не менее, в 32-битной системе на 5 часов приходится 540 байт. Удвойте на 64-битной.

Я знаю из Lsyncd (может быть, вы хотите это проверить?) Людей, у которых есть миллион часов. Просто ест гигабайт памяти.

9 голосов
/ 11 августа 2012

Моя информация:

[foo@caffeine ~]# cat /var/log/lsyncd.status | grep Inotify
Inotify watching 293208 directories

[foo@caffeine ~]# cat /proc/sys/fs/inotify/max_user_watches
1048576

lsyncd использует около 130 МБ памяти.

Я использую lsyncd для синхронизации некоторых каталогов с сервером аварийного восстановления.

Нет потери производительности / штрафа на главном сервере.

5 голосов
/ 11 февраля 2009

100 миллиардов триллионов газиллионов было бы слишком много, наверное. Kernel Korner - Вступление к inotify упоминает «тысячи часов», поэтому по крайней мере это число не должно быть проблемой.

2 голосов
/ 17 марта 2018

Зависит от того, сколько у вас баранов

Хотя 524288 - это максимальное количество файлов, которое можно просмотреть, если вы находитесь в среде, которая особенно ограничена в памяти, вы можете уменьшить это число. Каждый просмотр файла занимает 540 байт (32-бит) или ~ 1 кБ (64-бит), поэтому предполагается, что используются все 524288 часов, что приводит к верхней границе около 256 МБ (32-бит) или 512 МБ (64-бит) .

...