Почему lsof -p и просто lsof возвращают совершенно разные результаты?

554
Dimitar

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

Запуск lsof -n | awk ' | 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
Это короткая история, а не вопрос. Я могу предположить, что вопрос "почему?" но это должно быть четко указано. Kamil Maciorowski 6 лет назад 0

1 ответ на вопрос

0
AFH

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

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

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

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

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

lsof -n | grep "^dropbox " | awk '' | uniq | wc -l 

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

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

Похожие вопросы