Слишком много открытых файлов при использовании NodeJS child_processes.spawn для запуска сценариев - PullRequest
2 голосов
/ 17 мая 2011

Сценарий:

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

Мастер-скрипт сначала порождает всех дочерних элементов, которые он может (в соответствии с настройками конфигурации), а затем, когда дочерние процессы завершают работу, если в конфигурации требуется больше запусков, то запускаются новые дочерние процессы.

То, что я вижу, - это немедленная ошибка при попытке ускорить 83-й дочерний процесс. 83

Я ничего не делаю, чтобы явно закрыть файлы, открытые как часть процесса порождения потомков, но, вероятно, это не работа с кодом открытия, а с кодом модуля child_processes?

Мне очень любопытно магическое число 82 дочерних процессов. Похоже, это указывает на ограничение узла или комбинацию узлов в моей системе?

В идеале, у меня есть недостаток знаний о том, что ответ на этот вопрос или кто-то может предложить альтернативный способ запуска дочерних процессов сценариев, которые не будут страдать от этой проблемы?

Мне также интересно узнать о статусе API Web Worker, который поступает в NodeJS. Кто-нибудь знает что-нибудь об этом?

Подробности:

  • NodeJS v0.4.7
  • Mac OS X v10.6.7
  • ulimit -n = 256
  • магическое число порожденных детей, которые будут успешно бегать = 82 (это означает, что> 82 порожденных процесса вызовут ошибку «слишком много открытых файлов»)

Спасибо за любую помощь.

1 Ответ

3 голосов
/ 18 мая 2011

Полагаю, система делает именно то, что вы говорите. 82 процесса - это 3 открытых файла на процесс. STDIN, STDOUT, STDERR. Взрыва. Вы поразили свой ulimit только стандартными 3 файловыми дескрипторами. Запустите ulimit -n 512, и я уверен, что вы сможете запустить в два раза больше детей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...