Подтвердить что ты не робот

В Mac OS X, как я могу получить точное количество использования дескриптора файла?

В Linux ulimit -n можно использовать для изменения или просмотра ограничения на количество дескрипторов файла для процесса, а lsof -p nnn | wc -l, как представляется, постоянно сообщает о фактическом использовании дескриптора файла.

Но в Mac OS X lsof -p nnn | wc -l можно вернуть число выше предела. Я полагаю, это означает, что lsof возвращает больше, чем просто дескрипторы файлов, но я не могу сказать, что.

Нижняя строка: Как я могу получить точный подсчет использования дескриптора файла в Mac OS X?

4b9b3361

Ответ 1

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

Если вам просто нужно приблизительное приближение, добавив "grep -v" txt ", прежде чем ваш wc поможет вам приблизиться к точному значению. Если вам нужно точное значение, вам, вероятно, нужно собрать регулярное выражение для подачи вывода через эти файлы фильтра точно в столбец FD.

Ответ 2

Я недавно столкнулся с необходимостью идентифицировать это - команда, которую я использовал для подсчета общего количества записей (не только для файловых дескрипторов, но и для их относительного, следовательно, релевантного imo):

lsof | awk '{print $1}' | uniq -c | sort -rn | head

Это дает что-то вроде следующего (ваши самые популярные приложения могут отличаться!):

$lsof | awk '{print $1}' | uniq -c | sort -rn | head
3271 com.apple
2978 Google
 914 Atom\x20H
 505 Skype
 476 Microsoft
 375 Screenher
 304 Finder
 292 Dock
 277 Atom\x20H
 270 Atom\x20H

Мне обычно нужно видеть только первые 10 записей, но вы можете манипулировать head чтобы показать столько строк, сколько хотите.

Ответ 3

Я искал, какой процесс имеет много файловых дескрипторов - так что я думаю, что-то вроде

for pid in 'ps aux | tail -n +2 | awk '{print $2}''; do FCOUNT='lsof -p $pid | grep -v " txt " | wc -l'; echo "PID: $pid $FCOUNT"; done | sort -nk3

Ответ 4

Я изменил ответ aners, теперь он отображает только открытые fd номера определенного процесса:

FCOUNT=`lsof -p $1 | grep -v " txt " | wc -l`;echo "PID: $1 $FCOUNT" | sort -nk3

Пример:

$ ./fd-count.sh 5926                                                                                                           
PID: 5926       97