Слишком много открытых файловых дескрипторов RHEL 7.4

Я перешел на RHEL 7.4 с 6.9, и то же приложение, которое раньше нормально работало на 6.9, сталкивается с проблемой "Too many open files".

В обоих средах ulimits установлены одинаковые значения. После проверки с помощью команды "lsof" я заметил, что один и тот же набор файловых дескрипторов открывается процессом под разными "задачами". Например, процесс, который требует только 4 файловых дескриптора в RHEL 6.9, использует около 350+ в RHEL 7.4

Из-за этого любой процесс, открывающий несколько файлов, в течение нескольких минут сталкивается с ошибкой "Слишком много открытых файлов".

Кто-нибудь может подсказать мне правильный путь для отладки / исправления этой проблемы?

1 ответ

Во-первых, вы можете проверить текущее максимальное количество файловых дескрипторов и убедиться, что это разумное значение. На этот вопрос подробно объясняется, как это сделать.

Короче говоря, вы можете проверить максимальные глобальные FD, доступные в /proc/sys/fs/file-max или максимальные FD, доступные для оболочки с bash ulimit командование

После того как вы проверили это, вам, вероятно, будет интересно, какие процессы поглощают все ваши файловые дескрипторы. В этом ответе подробно описан сценарий оболочки, который вы можете использовать, чтобы перечислить, сколько FD потребляется в 10 лучших запущенных процессах. Сценарий с вопросом скопирован здесь:

find -maxdepth 1 -type d -name '[0-9]*' \
     -exec bash -c "ls {}/fd/ | wc -l | tr '\n' ' '" \; \
     -printf "fds (PID = %P), command: " \
     -exec bash -c "tr '\0' ' ' < {}/cmdline" \; \
     -exec echo \; | sort -rn | head

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

Другие вопросы по тегам