Создать реактивный скрипт приложения выполнить dev webserver error [duplicate]

Он возвращает список, подобный массиву.

Вы делаете этот массив как пример

var el = getElementsByClassName("elem");
el = Array.prototype.slice.call(el); //this line
el[0].appendChild(otherElem);  
45
задан codekick 27 April 2012 в 18:53
поделиться

3 ответа

Ошибка

EMFILE означает, что ОС отказывает вашей программе открывать больше файлов / сокетов.

Посмотрите: Как изменить количество ограничений для открытых файлов в Linux?

45
ответ дан Community 22 August 2018 в 07:28
поделиться
  • 1
    Увеличение лимита вашего сокета не будет устранять утечку, хотя, это только задержит ваше приложение от сбоев еще немного. – jpillora 14 August 2013 в 01:10
  • 2
    @jpillora, что вы предлагаете предотвратить утечку? У меня точно такая же проблема, и я не хочу исправлять ее, увеличивая ulimit, потому что, как вы писали, это временное исправление. – Rob 22 August 2013 в 12:45
  • 3
    @Robert Иногда увеличение ulimit на самом деле является решением, как если бы оно было на 256, и у вас был высокий трафик, хотя я в своем случае я неоднократно открывал файлы и не закрывал их, я поймал эту утечку с помощью lsof -p & lt; узлы pid & gt ;. Если это не удается, вы можете использовать модуль izaacs graceful-fs – jpillora 23 August 2013 в 16:59
  • 4
    Unfortunatelly graceful-fs модуль не для меня. Я достигаю предела из-за сокетов, а не из-за открытия большого количества файлов с помощью fs, но спасибо за помощь. – Rob 29 August 2013 в 08:59
  • 5
    сокеты и файлы являются файловыми дескрипторами, ulimit изменяет ограничение дескриптора файла – jpillora 4 September 2013 в 04:34

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

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

5
ответ дан GauravLuthra 22 August 2018 в 07:28
поделиться

В моем случае у нас уже была конфигурация 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

4
ответ дан Michael Benin 22 August 2018 в 07:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: