Почему значения file-nr и lsof для открытых файлов отличаются? [закрыто]

19

Я столкнулся с проблемой внезапно; все мои приложения и сервер работали нормально, и внезапно я вижу, как увеличивается число открытых файлов.

Я проверяю это с помощью этой команды:

cat /proc/sys/fs/file-nr

Когда я проверяю это, это показывает 44544 0 128000, таким образом, 44544 - число открытых файлов.

Но когда я проверяю с этой командой - lsof | wc -l это показывает - 28384.

Так какой из них правильный?

Мой максимальный лимит открытых файлов составляет 65535

ulimit -a
open files                      (-n) 65535

Я хочу знать 5 лучших процессов, которые используют больше открытых файлов. Я могу получить это от, lsofно показанное здесь количество очень отличается от другой команды, которую я упомянул выше.

Могу ли я получить подробную информацию о процессах, учитываемых этой командой cat /proc/sys/fs/file-nr?

По приведенной ниже ссылке написано, что мы не можем, Как отобразить дескрипторы открытого файла, но не используя команду lsof

Есть ли работа вокруг меня? Мне нужно выяснить, какой процесс начал использовать больше открытых файлов внезапно.

ОБНОВЛЕНИЕ Извините, ребята за беспокойство. Я обнаружил ошибку, которую я делал, я НЕ проверял lsof | wc -l от root. Вот почему я видел огромную разницу.

все же есть разница между выводом файла -nr и lsof | wc -l (от корня). lsof count больше, чем file -nr count. Причина этого в том, что file -nr игнорирует некоторые каталоги (которые lsof считает файлами). Я нашел эту причину в небольшом исследовании самого Google. в любом случае! спасибо ребята за помощь!

Vasanth Nag KV
источник
Связанный: serverfault.com/questions/485262/…
Barmar
Является ли на lsof | wc -l самом деле показывает отрицательное число?
Джо Сьюэлл
3
это был не отрицательный знак, это дефис!
Vasanth Nag KV

Ответы:

8

Кажется, здесь есть два вопроса. Во-первых, полную документацию о структурах file-nr и file-max можно найти по адресу

https://www.kernel.org/doc/Documentation/sysctl/fs.txt

Это определяет поля в этом файле как:

Три значения в file-nr обозначают количество выделенных файловых дескрипторов, количество выделенных, но неиспользуемых файловых дескрипторов и максимальное количество файловых дескрипторов. Linux 2.6 всегда сообщает 0 как количество свободных файловых дескрипторов - это не ошибка, это просто означает, что количество выделенных файловых дескрипторов точно соответствует количеству используемых файловых дескрипторов.

Надеюсь, это достаточно ясно. На второй вопрос ответили в указанной выше ветке ( /server/485262/number-of-file-descriptors-different-between-proc-sys-fs-file-nr-and-proc- пи ) и, кажется, передать либо

  1. «использовать lsof» и соответствующим образом фильтровать вывод, если вам нужно получить хорошее приближение дескрипторов файлов, используемых процессом или,
  2. Пройдите через файловую систему / proc (и все равно придется фильтровать вывод), чтобы получить моментальный снимок во время использования файлового дескриптора.

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

Следующий поток предлагает схему фильтрации для подхода «lsof»:

/server/396872/why-or-how-does-the-number-of-open-file-descriptors-in-use-by-root-exceed-ulim

Томас Н
источник
обновил мой вопрос. но спасибо за всю информацию там.
Vasanth Nag KV
Но как это возможно, чем ulimitдля меня говорит, что я могу открыть до 1024 файлов, если lsof | wc -lговорит, что у меня уже 1545?
Накилон
Пожалуйста, прочитайте справочные страницы на lsofи ulimitдля ответа на ваш вопрос.
Томас N