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
Я думаю, что ответ не полный (он ничего не говорит о максимальном ограничении файлов, открытых в системе).
Существует два ограничения в отношении максимального количества открытых файлов:
Максимальный лимит файлов, открытых на процесс.
- Вы можете увидеть значение этого лимита, используя:
ulimit -n
- Вы можете изменить этот лимит, используя:
ulimit -n new_limit_number
Вот команда, чтобы получить 10 лучших процессов, имеющих много открытых файлов:
lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head
- Вы можете увидеть значение этого лимита, используя:
Максимальный лимит файлов, открытых на систему.
- Вы можете увидеть значение этого лимита, используя:
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