Как узнать, сколько файлов процесс открыл эффективно?
Я знаю, что могу использовать команду
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