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

16

Когда я пытаюсь 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не получается ?

gbag
источник

Ответы:

17

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

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

fs.inotify.max_user_watches=1048576

чтобы:

/etc/sysctl.conf

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

тогда сделай

sysctl -p
Элан Хассон
источник
1
Увеличение файловых дескрипторов мне не помогает. Мое tailсообщение было немного иначе: tail: inotify resources exhausted. Этот ответ помог мне. Вы также можете использовать, sudo sysctl -w fs.inotify.max_user_watches=1048576 && sysctl -pчтобы проверить, помогает ли это без постоянного изменения. Этот пост также помогает nefaria.com/2014/08/tail-inotify-resources-exhausted
Руслан Стельмаченко,
9

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

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

  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
Раду Рэдяну
источник
6

Скорее всего, у вас закончились 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

zeekvfu
источник
3

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

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

JBat
источник
3

Бегать

ps aux | grep tail

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

tangxinfa
источник
ха это действительно сработало, отслеживая слишком много файлов
Александр Миллс
Как мне перевести данные? Можете ли вы объяснить, что означает каждая часть информации и что с этим делать? Например:root 20161 0.0 0.0 11132 1044 pts/0 S+ 17:27 0:00 grep tail
Кристия
Это проблема только в том случае, если совпадает слишком много процессов, совпадающая строка, содержащая «grep», генерируется самой командой. Пожалуйста, используйте команду "pgrep tail".
tangxinfa