tail: inotify нельзя использовать, возвращаясь к опросу: слишком много открытых файлов

Когда я пытаюсь tail -f catalina.outЯ получаю ошибку:

tail: inotify cannot be used, reverting to polling: Too many open files 

Я попробовал ответ в этом посте: слишком много открытых файлов - как найти виновника

lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head

Когда я выполнил указанную выше команду, вывод был

17 6115

13 6413

10 6417

10 6415

9 6418

9 6416

9 6414

8 6419

4 9 

4 8

Я не вижу ни одного процесса с 1024 открытыми файлами. Разве число файлов не открыто 17,13,10,10,9? Или я не так понимаю? И все это были bash,sshd,apache2, tomcat имел номер 4.

Я тоже сделал lsof | grep tail | wc -l который вернулся 20, Эти цифры не очень большие, так почему же tail -f catalina.out потерпеть поражение?

7 ответов

Это было решено для меня, следуя инструкциям на http://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exhausted.html

Постоянное решение (сохраняется при перезапуске) Добавление строки:

fs.inotify.max_user_watches=1048576

чтобы:

/etc/sysctl.conf

постоянное фиксированное предельное значение (даже между перезапусками).

тогда сделай

sysctl -p

Я думаю, что ответ не полный (он ничего не говорит о максимальном ограничении файлов, открытых в системе).

Существует два ограничения в отношении максимального количества открытых файлов:

  1. Максимальный лимит файлов, открытых на процесс.

    • Вы можете увидеть значение этого лимита, используя: ulimit -n
    • Вы можете изменить этот лимит, используя: ulimit -n new_limit_number
    • Вот команда, чтобы получить 10 лучших процессов, имеющих много открытых файлов:

      lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head
      
  2. Максимальный лимит файлов, открытых на систему.

    • Вы можете увидеть значение этого лимита, используя: cat /proc/sys/fs/file-max
    • Вы можете изменить этот лимит, используя: echo new_limit_number > /proc/sys/fs/file-max
    • Подсчитать все дескрипторы открытых файлов: lsof | wc -l

sysctl fs.inotify.max_user_instances получит лимит на пользователя inotify,

Я испытал это, и все лимиты системы были достаточно высокими, но настройки по умолчанию обычно относительно низки, вы можете увеличить его в sysctl.conf и перезагрузите его sysctl -p,

Скорее всего, у вас кончились inotify часы. Возможно, вы используете некоторые инструменты синхронизации файлов (например, Dropbox) в фоновом режиме?

В Linux внутренняя реализация tail -f Команда использует inotify механизм по умолчанию, чтобы отслеживать изменения файлов. Если вы исчерпали все inotify часы (8192 по умолчанию), затем inotify -f необходимо переключиться на опрос, чтобы обнаружить изменения в этом файле.

Конечно, вы можете изменить максимальное количество inotify часы.

ссылка:
http://www.quora.com/How-is-tail-f-implemented
http://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exhausted.html
https://serverfault.com/questions/510708/tail-inotify-cannot-be-used-reverting-to-polling-too-many-open-files

Бежать

ps aux | grep tail

проверить, не слишком ли много запущенных хвостовых команд, таких как spawn от crontab.

Проверьте версию своего ядра, возможно, это ошибка:

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1101666

редактировать /etc/sysctl.conf добавить

      fs.inotify.max_user_watches=1048576
fs.inotify.max_user_instances=1048576
      sysctl -p
Другие вопросы по тегам