Node.js, path.js аварийно завершает работу после подключения большого количества пользователей к приложению

Привет, ребята, у меня есть приложение, написанное на Express.js, и я использую socket.io для отображения данных в реальном времени для пользователей.

Когда есть больше, скажем, 10 пользователей на сайте внезапно происходит сбой серверов узлов, и я получаю эту ошибку

path.js:309 var path = (i >= 0) ? arguments[i] : process.cwd();

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

РЕДАКТИРОВАТЬ: это вся ошибка

path.js:309
      var path = (i >= 0) ? arguments[i] : process.cwd();
                                                   ^
Error: EMFILE, too many open files
    at Object.exports.resolve (path.js:309:52)
    at ExpressHandlebars.extend.loadTemplate (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/lib/express-handlebars.js:111:25)
    at ExpressHandlebars.load (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/lib/express-handlebars.js:153:18)
    at /Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/node_modules/async/lib/async.js:224:13
    at /Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/node_modules/async/lib/async.js:108:13
    at Array.forEach (native)
    at _each (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/node_modules/async/lib/async.js:32:24)
    at async.each (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/node_modules/async/lib/async.js:107:9)
    at _asyncMap (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/node_modules/async/lib/async.js:223:9)
    at Object.map (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/node_modules/async/lib/async.js:201:23)
    at ExpressHandlebars.mapTemplates (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/lib/express-handlebars.js:157:19)
    at fn (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/node_modules/async/lib/async.js:579:34)
    at Object._onImmediate (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/node_modules/async/lib/async.js:495:34)
    at processImmediate [as _immediateCallback] (timers.js:330:15)
>> application exited with code 

8

1 ответ

Проверьте это: https://github.com/paulmillr/chokidar/issues/45

Похоже, это ошибка "слишком много открытых файлов", которая может произойти, если ваше приложение взаимодействует с большим количеством файлов в файловой системе. Вы не указываете, какая у вас платформа, я предполагаю, что Linux, предлагаемое исправление, которое следует по ссылкам, - до вашего ulimit.

Полное цитируемое исправление:

EMFILE означает, что слишком много открытых файлов. Бранч просматривает все ваши файлы проекта, и обычно это довольно большое число. Вы можете исправить эту ошибку, установив максимальное число открытых файлов на большее число с помощью команды ulimit -n <number> (10000 должно быть достаточно).

Другие вопросы по тегам