Он возвращает список, подобный массиву.
Вы делаете этот массив как пример
var el = getElementsByClassName("elem");
el = Array.prototype.slice.call(el); //this line
el[0].appendChild(otherElem);
EMFILE
означает, что ОС отказывает вашей программе открывать больше файлов / сокетов.
Посмотрите: Как изменить количество ограничений для открытых файлов в Linux?
EMFILE
означает error maximum files
, что указывает на то, что ОС отказывает вашей программе открывать больше дескрипторов файлов.
Обратите внимание, что открытые файлы в системе включают файлы дисков, именованные каналы, сетевые сокеты и устройства открытые всеми процессами.
Ваша операционная система определяет ограничение на доступ к файлам для каждого процесса.
Чтобы проверить ограничение доступа к файлу вашей системы, используйте команду ulimit -a
. Как правило, в unix-подобной системе по умолчанию 1024.
Если ограничение было 1024, значит, вы / процесс можете открыть максимум 1024 файла. если вы превысите этот предел, значит, open
, pipe
и dup
системные вызовы не сработают и выдадут ошибку EMFILE.
Когда вы получаете EMFILE
, это в основном указывает на утечку в вашем коде. Увеличение ulimit до более высокого значения не является хорошим решением в случае утечки в вашей программе.
Вы должны попытаться выяснить причину утечки. Следующие могут использоваться для отладки в операционной системе unix:
lsof
, что означает команда list open files
, дает список открытых файлов. Предположим, что у вашей программы nodeJS есть утечка, чтобы узнать общее количество файловых дескрипторов, открытых вашей программой: lsof | grep-узел | wc -l Используя это, мы можем узнать, где находится утечка, и затем мы можем исправить ее.
В моем случае у нас уже была конфигурация ulimit set и kern.maxfiles, которая могла бы работать на Mac.
Исправлено ограничение количества максимальных сокетов в глобальном масштабе. В более поздних версиях узла предел Infinity.
Попробуйте добавить эти строки кода:
var https = require('https');
var http = require('http');
https.globalAgent.maxSockets = 5;
http.globalAgent.maxSockets = 5;
В случае использования библиотеки запросов вы можете настроить эти параметры.
См. https://github.com/request/request#request---simplified-http-client
Подробнее о maxSockets: https://nodejs.org/api/http.html#http_agent_maxsockets
fs
, но спасибо за помощь. – Rob 29 August 2013 в 08:59