У меня есть сервер Linux с 1,3 ТБ твердотельного накопителя nvme и 64 ГБ оперативной памяти.
Существует производственное приложение, основанное на последних версиях nextjs и nod. Итак, у меня есть docker-compose с контейнером для внешнего интерфейса, где я просто копирую файлы src и выполняю в Dockerfile:
RUN yarn install
RUN yarn build
Некоторое время все работало нормально, но вчера столкнулся с другими проблемами.
Во-первых, когда я захотел всё переразвернуть, Yarn install начала зависать в случайных местах, сообщая, что у меня сеть медленная (это не так). В качестве временного решения я решил запустить Yarn install на хост-машине и внутри Dockerfile скопировать исходный код с node_modules в контейнер. Это сработало, но на этапе сборки второй шаг начал давать сбой:
#23 0.261 yarn run v1.22.22
#23 0.283 $ GENERATE_SOURCEMAP=false next build
#23 0.717
#23 0.757 ▲ Next.js 14.2.5
#23 0.757
#23 0.804 Creating an optimized production build ...
#23 13.93 FATAL ERROR: v8::Object::GetCreationContextChecked No creation context available
#23 13.93 ----- Native stack trace -----
#23 13.93
#23 13.93 1: 0xe22fc9 node::OnFatalError(char const*, char const*) [/usr/local/bin/node]
#23 13.93 2: 0x122b176 v8::Utils::ReportApiFailure(char const*, char const*) [/usr/local/bin/node]
#23 13.93 3: 0x12405ac v8::Object::GetCreationContextChecked() [/usr/local/bin/node]
#23 13.93 4: 0xf7d90c [/usr/local/bin/node]
#23 13.93 5: 0x7f78dd77613c
#23 13.93
#23 13.93
#23 13.93 #
#23 13.93 # Fatal error in , line 0
#23 13.93 # Missing deoptimization information for OptimizedFrame::Summarize.
#23 13.93 #
#23 13.93 #
#23 13.93 #
#23 13.93 #FailureMessage Object: 0x7fff91793c30
#23 13.93 ----- Native stack trace -----
#23 13.93
#23 13.93 1: 0xffe461 [/usr/local/bin/node]
#23 13.93 2: 0x28c276b V8_Fatal(char const*, ...) [/usr/local/bin/node]
#23 13.93 3: 0x139cff3 v8::internal::OptimizedFrame::Summarize(std::vector<v8::internal::FrameSummary, std::allocator<v8::internal::FrameSummary> >*) const [/usr/local/bin/node]
#23 13.93 4: 0x13a5116 [/usr/local/bin/node]
#23 13.93 5: 0x13a931c v8::internal::Isolate::CaptureDetailedStackTrace(int, v8::StackTrace::StackTraceOptions) [/usr/local/bin/node]
#23 13.94 6: 0x12361f3 v8::StackTrace::CurrentStackTrace(v8::Isolate*, int, v8::StackTrace::StackTraceOptions) [/usr/local/bin/node]
#23 13.94 7: 0xf76c96 node::GetCurrentStackTrace(v8::Isolate*, int) [/usr/local/bin/node]
#23 13.94 8: 0xec549b node::DumpJavaScriptBacktrace(_IO_FILE*) [/usr/local/bin/node]
#23 13.94 9: 0xe22fd5 node::OnFatalError(char const*, char const*) [/usr/local/bin/node]
#23 13.94 10: 0x122b176 v8::Utils::ReportApiFailure(char const*, char const*) [/usr/local/bin/node]
#23 13.94 11: 0x12405ac v8::Object::GetCreationContextChecked() [/usr/local/bin/node]
#23 13.94 12: 0xf7d90c [/usr/local/bin/node]
#23 13.94 13: 0x7f78dd77613c
#23 14.07 Trace/breakpoint trap (core dumped)
#23 14.08 info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
#23 14.08 error Command failed with exit code 133.
#23 ERROR: process "/bin/sh -c yarn build" did not complete successfully: exit code: 133
Когда я попробовал выполнить эти действия локально на хост-компьютере без Docker, все было в порядке. Таким образом, проблема возникает только внутри Docker. Я тщательно исследовал ошибку, связанную с зависанием установки пряжи, и есть ссылка на то, что это может быть связано с медленным вводом-выводом. Проблема со сборкой также выглядит как проблема с памятью.
Такое ощущение, что Docker по каким-то причинам не хватает ресурсов или начал медленно работать. Обратите внимание: подобная проблема уже была у нас несколько месяцев назад. Мы пытались полностью стереть сервер, даже просили Hetzner заменить наши SSD, но это не помогло и проблема осталась. Поэтому мы были вынуждены просто перейти на другой сервер, и до сих пор все работало нормально.
Не верю, что уже второй раз какие-то "физические" проблемы с сервером, но выглядит это очень странно.
Докер версии 26.1.4, сборка 5650f9b NodeJ: 22 Linux: Ubuntu-22.04.
🤔 А знаете ли вы, что...
Node.js позволяет создавать масштабируемые приложения с использованием механизмов кластеризации.