#node.js #reactjs #docker #file-descriptor
Вопрос:
Мой докер-контейнер, обслуживающий интерфейс (react) моего приложения в процессе работы, выходит из строя
{"log":"Error: EMFILE: too many open files, open '/ui/build/static/css/main.9c502893.chunk.css'n","stream":"stderr","time":"2021-08-23T11:31:39.794522183Z"}
Похоже, это вызвано тем, что узел сохраняет открытые статические файлы :
в /proc/61/fd
:
lr-x------ 1 root root 64 Aug 24 08:30 91 -> /ui/build/images/vertical-life-project-owner.jpg
lr-x------ 1 root root 64 Aug 24 08:30 910 -> /ui/build/icons/deckchair.png
lr-x------ 1 root root 64 Aug 24 08:30 9100 -> /ui/build/static/js/main.f38b6972.chunk.js
lr-x------ 1 root root 64 Aug 24 08:30 9101 -> /ui/build/static/css/3.3b09fbf6.chunk.css
lr-x------ 1 root root 64 Aug 24 08:30 9102 -> /ui/build/static/css/main.9c502893.chunk.css
lr-x------ 1 root root 64 Aug 24 08:30 9103 -> /ui/build/static/js/3.d81cf15a.chunk.js
lr-x------ 1 root root 64 Aug 24 08:30 9104 -> /ui/build/videos/home.mp4
lr-x------ 1 root root 64 Aug 24 08:30 9105 -> /ui/build/static/js/main.f38b6972.chunk.js
lr-x------ 1 root root 64 Aug 24 08:30 9106 -> /ui/build/static/js/0.a1e638a1.chunk.js
lr-x------ 1 root root 64 Aug 24 08:30 9107 -> /ui/build/static/js/6.f8fd35f0.chunk.js
lr-x------ 1 root root 64 Aug 24 08:30 9108 -> /ui/build/manifest.json
lr-x------ 1 root root 64 Aug 24 08:30 9109 -> /ui/build/logo192.png
...
ulimit
Мой сервер достигнут, когда открыто достаточное количество файлов (у меня в приложении 5000 пользователей в день, так что это происходит быстро), что приводит к сбою этого контейнера докеров
Я попробовал следующее :
- Добавьте управление кэшем заголовков в статические ресурсы
- Обновление версии узла (12, 13.13.0, 14.17.5)
- Добавление
--ulimit nofile=20000:25000
в мою команду запуска docker - Увеличение
ulimit
на моем сервере - Воспользуйся
graceful-fs
но ничего не сработало, эти файлы продолжают оставаться открытыми.
Мое приложение обслуживается с помощью этого сценария в package.json
: "deployment": "export NODE_ENV=production amp;amp; serve -s build -l 5002"
запускается этим файлом dockerfile
FROM node:14.17.5-alpine3.14
WORKDIR /ui
ENV PATH /ui/node_modules/.bin:$PATH
COPY ui /ui
COPY builds/production/.env /ui/.env
RUN yarn add package.json --silent
RUN yarn run build
CMD yarn run deployment
Комментарии:
1. Что вы используете для обслуживания производственной сборки?
2. @Matt Я использую эту команду :
export NODE_ENV=production amp;amp; serve -s build -l 5002
3. Я добавил файл dockerfile в свой вопрос