Что означает код errno 24 (EMFILE)?

 
Также может означать:
КонстантаТипОС
ERROR_BAD_LENGTHОшибка WindowsWindows
KERN_MEMORY_DATA_MOVEDКод возврата ядра macOSmacOS
ippStsNoOperationInDllСтатус Intel IPPЛюбая
REFERENCE_BY_POINTERКод BSODWindows
Предыдущий Следующий
ENFILE ENOTTY

EMFILE

Предел для отдельного процесса

EMFILE означает, что процесс достиг своего ограничения файловых дескрипторов. В Linux RLIMIT_NOFILE задаёт число, на единицу превышающее максимальный номер дескриптора, который процесс может открыть. Ошибка возникает при открытии файла, принятии сокета, создании канала, дублировании дескриптора и в других API, выделяющих дескриптор.

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

Что проверить

  • Подсчитайте дескрипторы по типу и владельцу внутри проблемного процесса и сравните их с фактическим ограничением.
  • Проверьте все пути закрытия: исключения, тайм-ауты, неудачные рукопожатия, запуск дочерних процессов и дублированные дескрипторы.
  • Осознанно применяйте close-on-exec, чтобы посторонние дочерние процессы не наследовали дескрипторы на неопределённый срок.
  • Повышайте предел только после проверки расчётной нагрузки и очистки: более высокий потолок может лишь отложить проявление утечки.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.