1

В настоящее время я установил лимит открытых файлов в 100000, но lsof сообщает, что он почти исчерпан.

Запуск lsof -n | awk '{print $2'} | sort | uniq -c | sort -n приводит к:

      1 PID
  90321 3979

Практически такой же результат получает lsof -n | grep 3979 | wc -l

Но работает lsof -n -p 3979 | wc -l возвращает что-то совершенно другое

3930

Подсчет файлов в /proc/3979/fd/ также возвращает меньший результат.

1 ответ1

0

Я посмотрел журналы из dropbox в моей системе, и я вижу сопоставимые различия.

Когда я смотрю подробно на отдельные журналы, я обнаруживаю, что в dropbox показано 400 файлов, открытых с помощью lsof -p , и 23500, открытых с помощью ls ... | grep '^dropbox'

Глядя на длинный список, я обнаружил, что dropbox имеет 60 потоков, и большинство из базовых 400 файлов представлены в каждом потоке, что объясняет разницу.

Что я не знаю, так это то, находятся ли дескрипторы файлов в потоках в разделяемой памяти или индивидуально для потоков. Дескрипторы файлов в общей памяти не должны учитываться более одного раза в лимите открытых файлов.

Моя команда для подсчета потоков была:

lsof -n | grep "^dropbox " | awk '{print $3}' | uniq | wc -l

Если ваше приложение ведет себя аналогично, то нижняя цифра является реалистичной.

Обратите внимание, что все цифры являются приблизительными: я проигнорировал, когда строки заголовков включены в счетчики и включение основного PID в счетчик потоков. Поскольку отчеты ls относятся к разным временам, они никогда не могут быть полностью согласованы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .