Как узнать, сколько файлов процесс открыл эффективно?

Я знаю, что могу использовать команду

lsof -p xxxx | wc -l

Чтобы узнать количество открытых файлов в процессе, он работает, но, тем не менее, он слишком неэффективен. У меня есть какой-то серверный процесс, у которого слишком много файлов сокетов, метод wc -l никогда не возвращает результат. Итак, как эффективно узнать, сколько файлов открыто в процессе?

Благодарю.

3 ответа

Есть интерфейс proc для открытых файлов: /proc/PID/fd/. Это каталог символических ссылок. Любые открытые сокеты будут связаны с файлом с именем "socket:[INODE NUMBER]"

Использование ps -C <progname> -o pid= | wc -l где progname - это имя процесса в ps-listing.

Некоторые контексты (сценарии использования) могут обеспечить лучшее направление для ответов.

Документация к lsof описывает несколько методов, которые он вызывает, которые могут блокировать в течение нежелательных периодов времени. Я бы посоветовал взглянуть на раздел БЛОКИ И ТАЙМ - ауты на странице руководства lsof.

Вы можете попробовать следующее и посмотреть, дает ли он желаемые результаты:

lsof -bwp $pid | wc -l
Другие вопросы по тегам