Когда я пытаюсь tail -f catalina.out
, я получаю сообщение об ошибке:
tail: inotify cannot be used, reverting to polling: Too many open files
Я попробовал ответ в этом посте: Слишком много открытых файлов - как найти виновника [ 119]
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
не получается?
Проверьте версию своего ядра, это может быть ошибка:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1101666
Запустите
ps aux | grep tail
, чтобы проверить, слишком много ли запущено хвостовых команд, таких как spawn от crontab.
Это было решено для меня, следуя инструкциям на http://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exhausted.html
Постоянное решение (сохраняется при перезапусках) Добавление строки:
fs.inotify.max_user_watches=1048576
к:
/etc/sysctl.conf
фиксированное предельное значение постоянно (даже между перезапусками).
затем сделать
sysctl -p
sysctl fs.inotify.max_user_instances
получит лимит на пользователя для inotify
.
Я испытал это, и все ограничения системы были достаточно высокими, но настройки по умолчанию обычно относительно низки, вы можете увеличить его в 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
Скорее всего, у вас закончились часы 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 -не может быть использован-возвращен-на-опрос слишком много открытых файлов