
tail: inotify cannot be used, reverting to polling: Too many open files
Я запускаю серверы apache и tomcat на Ubuntu (AWS ec2). Всякий раз, когда я пытаюсь отслеживать catalina.out
tomcat, я получаю слишком много открытых файлов. Однако я могу просматривать их с помощью vi.
После поиска в интернете я попробовал следующую команду:
lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head
С результатами ниже
17 5650
17 5178
13 5972
10 5976
10 5974
9 5977
9 5975
9 5973
8 5978
4 9
Когда я только что запустил lsof, идентификаторы процессов: 5650 были bash, 5178 снова был bash, а остальные были sshd,top и apache2.
Почему bash, top, sshd открывают огромное количество файлов? Как мне закрыть эти файлы? Будет ли польза от завершения этих процессов? Уменьшится ли их количество само по себе или мне нужно что-то сделать? Сейчас все работает как и ожидалось, за исключением того, что tail -f открывает слишком много файлов.
Я часто использую top и ssh для сервера. Но почему они не выпускают файлы? ИЛИ я соединяю не те точки.
решение1
Вероятно, у вас закончились часы inotify. По умолчанию это абсурдно низкий 8192.
Проверьте текущее значение следующим образом:
sysctl fs.inotify.max_user_watches
Затем измените его на что-то более разумное, отредактировав /etc/sysctl.conf
файл, который он включает, и добавив:
fs.inotify.max_user_watches = 524288
(или любое другое значение) и затем запустить его, sysctl -p
чтобы он вступил в силу.
решение2
Вы можете попробовать увеличить fs.inotify.max_user_instances:
sysctl fs.inotify.max_user_instances=512
решение3
Может быть, это ошибка ядра Ubuntu, проверьтеэтотиз багтрекера launchpad.
И при необходимости обновите ядро!