Слишком много открытых файловых дескрипторов 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. Я надеюсь, что это поможет, пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы.