Правило для количества фактов

EMFILE означает error maximum files, что указывает на то, что ОС отказывает вашей программе открывать больше дескрипторов файлов.

Обратите внимание, что открытые файлы в системе включают файлы дисков, именованные каналы, сетевые сокеты и устройства открытые всеми процессами.

Ваша операционная система определяет ограничение на доступ к файлам для каждого процесса.

Чтобы проверить ограничение доступа к файлу вашей системы, используйте команду ulimit -a. Как правило, в unix-подобной системе по умолчанию 1024.

Если ограничение было 1024, значит, вы / процесс можете открыть максимум 1024 файла. если вы превысите этот предел, значит, open, pipe и dup системные вызовы не сработают и выдадут ошибку EMFILE.

Когда вы получаете EMFILE, это в основном указывает на утечку в вашем коде. Увеличение ulimit до более высокого значения не является хорошим решением в случае утечки в вашей программе.

Вы должны попытаться выяснить причину утечки. Следующие могут использоваться для отладки в операционной системе unix:

  1. lsof, что означает команда list open files, дает список открытых файлов. Предположим, что у вашей программы nodeJS есть утечка, чтобы узнать общее количество файловых дескрипторов, открытых вашей программой: lsof | grep-узел | wc -l
  2. Чтобы узнать файловые дескрипторы для сокетов, используйте: lsof -n -i -P | grep node

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

2
задан false 2 March 2019 в 23:41
поделиться