| Предыдущий | Следующий |
| EINVAL | EMFILE |
ENFILE
Отличие от EMFILE
ENFILE означает исчерпание общесистемной таблицы открытых файлов либо связанного глобального лимита файловых объектов. В отличие от него, EMFILE обычно относится к пределу дескрипторов одного процесса. Программа, получившая ENFILE, может вовсе не быть главным потребителем: дефицит возник на всём узле.
Сервер способен прийти к такому состоянию из-за утечек дескрипторов, большого числа одновременных клиентов, неконтролируемого создания рабочих процессов, очередей сообщений или другой нагрузки на том же хосте. Поскольку могут одновременно отказывать открытия, accept, создание каналов и другие выделяющие объекты вызовы, инцидент распространяется за пределы исходного приложения.
Как расследовать и восстановить работу
- Отделите общесистемное исчерпание файловых объектов от ограничения
RLIMIT_NOFILEтекущего процесса. - До повышения лимитов измерьте общесистемное использование и найдите крупнейших потребителей дескрипторов.
- Ищите утечки сокетов, файлов, каналов и дескрипторов очередей, включая наследование при запуске процессов.
- Применяйте управление допуском и корректное поведение при перегрузке, чтобы временный предел не вызвал лавину повторов.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.