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 должно быть достаточно).