Слишком много открытых файлов - как найти виновника

45

При запуске tail -f filename я получил следующее сообщение:

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

Это потенциальная проблема?

Как мне диагностировать, что отвечает за все открытые файлы? У меня есть список подозрительных процессов, но если они не оказываются виновниками, инструкции, которые не полагаются на знание того, какой процесс проверить, будут полезны.

    
задан Andrew Grimm 28.08.2012 в 05:07
источник

2 ответа

46

Вы можете использовать lsof, чтобы понять, кто открывает так много файлов. Обычно это (веб-сервер), который открывает так много файлов, но lsof, несомненно, поможет вам определить причину.

Как только вы поймете, кто плохой парень, вы можете

  • убить процесс / остановить программу
  • поднимите ссылку ulimit Ссылка

Если вывод lsof достаточно велик, попробуйте перенаправить его в файл, а затем откройте файл

Пример (возможно, вам понадобится Ctrl + C первая команда)

lsof > ~/Desktop/lsof.log
cat ~/Desktop/lsof.log | awk '{ print  " " ; }' | sort -rn | uniq -c | sort -rn | head -20
vim ~/Desktop/lsof.log
    
ответ дан Andrea Olivato 28.08.2012 в 17:13
источник
14

В случае, если кому-то это понадобится ...

ulimit -a

Отобразятся все текущие пределы. В частности, ulimit -n 70000 установит лимит дескриптора файла.

Также ...

cat /proc/sys/fs/file-max

Будет отображаться / устанавливать ограничение ядра при его редактировании.

sudo echo 200000 > /proc/sys/fs/file-max

Более подробное объяснение можно найти в ...

Как я могу увеличить ограничение открытых файлов для пользователя без полномочий root?

    
ответ дан kervin 04.05.2014 в 20:10