Достигнуто ограничение на доступ к ядру inotify

В настоящее время я сталкиваюсь с проблемой в 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'.` 

Я немного искал Google, и каждое найденное мной решение - увеличить лимит с помощью:

sudo sysctl fs.inotify.max_user_watches=<some random high number>

Но я не смог найти никакой информации о последствиях повышения этой ценности. Я полагаю, что значение по умолчанию для ядра было установлено по какой-то причине, но оно, по-видимому, не соответствует конкретным обычаям. (например, при использовании Dropbox с большим количеством папок или программного обеспечения, которое контролирует большое количество файлов).

Итак, вот мои вопросы:

  • Можно ли повысить эту ценность и каковы будут последствия слишком высокой ценности?
  • Есть ли способ узнать, какие часы в настоящее время установлены, и какой процесс позволяет им определить, не достигнуто ли достигнутое ограничение от неисправного программного обеспечения?
178 голосов | спросил Ultraspider 25 Maypm11 2011, 16:43:40

1 ответ


235

Безопасно ли повысить это значение и каковы будут последствия слишком высокой ценности?

Да, безопасно поднять это значение, а ниже - возможные затраты [ источник ]:

  • Каждый используемый просмотр inotify занимает 540 байт (32-разрядная система) или 1 кБ (double - on 64-bit) [sources: 1 , 2 ]
  • Это выходит из памяти ядра , которая не подлежит обсуждению.
  • Предполагая, что вы установили max на 524288, и все были использованы (невероятно), вы будете использовать примерно 256 МБ /512 МБ 32-битной /64-битной памяти ядра.
    • Обратите внимание, что ваше приложение также будет использовать дополнительную память для отслеживания дескрипторов inotify, путей файлов /каталогов и т. д. - насколько это зависит от его дизайна.

Чтобы проверить максимальное количество часов inotify:

cat /proc/sys/fs/inotify/max_user_watches

Установить максимальное количество часов inotify

Временно:

  • Запустите sudo sysctl fs.inotify.max_user_watches= с вашим предпочтительным значением в конце.

Постоянно ( более подробная информация )

  • введите fs.inotify.max_user_watches=524288 в свои настройки sysctl. В зависимости от вашей системы они могут находиться в одном из следующих мест:
    • Debian /RedHat: /etc/sysctl.conf
    • Arch: поместите новый файл в /etc/sysctl.d/, например. /etc/sysctl.d/40-max-user-watches.conf
  • вы можете перезагрузить параметры sysctl, чтобы избежать перезагрузки: sysctl -p (Debian /RedHat) или sysctl --system (Arch)

Проверьте, не достигнуто ли максимальное количество часов inotify:

Используйте tail с опцией -f (follow) в любом старом файле, например. tail -f /var/log/dmesg:   - Если все будет хорошо, он покажет последние 10 строк и паузу; прервать с помощью Ctrl-C   - Если вы находитесь вне часов , он будет терпеть неудачу с этим несколько загадочная ошибка :

tail: невозможно смотреть '/var /log /dmsg': на устройстве не осталось места

Чтобы узнать, что использует часы inotify

find /proc/*/fd -lname anon_inode:inotify |
   cut -d/ -f3 |
   xargs -I '{}' -- ps --no-headers -o '%p %U %c' -p '{}' |
   uniq -c |
   sort -nr

В первом столбце указано количество inotify fds (а не количество часов), а второе показывает PID этого процесса [sources: 1 , 2 ].

ответил Tshepang 25 Maypm11 2011, 17:21:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132