Компиляция javascript: heap out of memory
От: bnk СССР http://unmanagedvisio.com/
Дата: 24.04.21 19:40
Оценка:
Дожили
Падает сборка проекта из-за недостатка памяти (компиляция тайпскрипта). На машине 32гб памяти.
Наверное какая-то переменная окружения? Никто не сталкивался? Я погуглил поверхностно, но наверное не по глазам.
Последний раз я похожее видел наверное на плюсах когда компилировал буст со спиритом.
  Ужас под катом
[16976:0000027CB3429910] 9828365 ms: Mark-sweep 1343.8 (1441.0) -> 1329.5 (1442.5) MB, 611.7 / 0.1 ms (average mu = 0.286, current mu = 0.245) allocation failure scavenge might not succeed
[16976:0000027CB3429910] 9829209 ms: Mark-sweep 1344.3 (1442.5) -> 1330.9 (1443.5) MB, 637.2 / 0.1 ms (average mu = 0.265, current mu = 0.245) allocation failure scavenge might not succeed

<--- JS stacktrace --->

==== JS stack trace =========================================

0: ExitFrame [pc: 000003737DB5C5C1]
Security context: 0x01d8fb09e6c1 <JSObject>
1: getAliasForSymbolInContainer(aka getAliasForSymbolInContainer) [00000122E64567B9] [/node_modules/typescript/lib/typescript.js:~47131] [pc=0000037384417647](this=0x017e496026f1 <undefined>,container=0x01df606aa3b1 <SymbolObject map = 000002B8E3A42839>,symbol=0x0163641ca871 <SymbolObject map = 000002B8E3A4D1B1>)
2: getAlterna...

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed — JavaScript heap out of memory
1: 00007FF76C76879A v8::internal::GCIdleTimeHandler::GCIdleTimeHandler+4506
2: 00007FF76C743206 node::MakeCallback+4534
3: 00007FF76C743B80 node_module_register+2032
4: 00007FF76CA61AFE v8::internal::FatalProcessOutOfMemory+846
5: 00007FF76CA61A2F v8::internal::FatalProcessOutOfMemory+639
6: 00007FF76CC48224 v8::internal::Heap::MaxHeapGrowingFactor+9620
7: 00007FF76CC3F206 v8::internal::ScavengeJob::operator=+24550
8: 00007FF76CC3D85C v8::internal::ScavengeJob::operator=+17980
9: 00007FF76CC465A7 v8::internal::Heap::MaxHeapGrowingFactor+2327
10: 00007FF76CC46626 v8::internal::Heap::MaxHeapGrowingFactor+2454
11: 00007FF76CD708C7 v8::internal::Factory::NewFillerObject+55
12: 00007FF76CDEDAB6 v8::internal::operator<<+73494
13: 000003737DB5C5C1
Re: Компиляция javascript: heap out of memory
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 24.04.21 19:48
Оценка: 8 (1)
Здравствуйте, bnk, Вы писали:


bnk>Дожили

bnk>Падает сборка проекта из-за недостатка памяти (компиляция тайпскрипта). На машине 32гб памяти.
bnk>Наверное какая-то переменная окружения? Никто не сталкивался? Я погуглил поверхностно, но наверное не по глазам.
bnk>Последний раз я похожее видел наверное на плюсах когда компилировал буст со спиритом.

Как вариант, zram+zswap могут помочь. Как раз на ноуте с бустом и кучей шаблонов когда-то только они и выручали.
PS. Firefox тоже когда-то не могли собрать сами разработчики.
https://elibrary.ru/author_counter.aspx?id=875549
Re[2]: Компиляция javascript: heap out of memory
От: bnk СССР http://unmanagedvisio.com/
Дата: 24.04.21 20:00
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Как вариант, zram+zswap могут помочь. Как раз на ноуте с бустом и кучей шаблонов когда-то только они и выручали.

N>PS. Firefox тоже когда-то не могли собрать сами разработчики.

Спасибо, попробую. Но я же вообще-то жаваскрипт (тайпскрипт) компилирую (веб-проект блин, который вообще по идее должен работать без компиляции!)
Пришла беда откуда не ждали, что называется.
Re: Компиляция javascript: heap out of memory
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 24.04.21 20:24
Оценка: :)
Здравствуйте, bnk, Вы писали:


bnk>Дожили

bnk>Падает сборка проекта из-за недостатка памяти (компиляция тайпскрипта). На машине 32гб памяти.

Сорян за оффтоп.
Если компилятор тайпскрипта написан на джаваскрипте — то ничего удивительного
Маньяк Робокряк колесит по городу
Re: Компиляция javascript: heap out of memory
От: Lazytech Ниоткуда  
Дата: 25.04.21 06:55
Оценка: +1
Здравствуйте, bnk, Вы писали:

bnk>Падает сборка проекта из-за недостатка памяти (компиляция тайпскрипта). На машине 32гб памяти.


Смутно подозреваю, что проблема в компиляторе TypeScript, а не в JavaScript.
Re[2]: Компиляция javascript: heap out of memory
От: Lazytech Ниоткуда  
Дата: 25.04.21 07:57
Оценка: +1
Здравствуйте, Marty, Вы писали:

M>Если компилятор тайпскрипта написан на джаваскрипте — то ничего удивительного


Вообще-то JavaScript по-своему крут. К примеру, один разработчик сделал на фреймворке Angular интерфейс для Telegram, работающий в консоли.
Re[3]: Компиляция javascript: heap out of memory
От: DenisCh Россия  
Дата: 26.04.21 03:38
Оценка: +1
Здравствуйте, bnk, Вы писали:

bnk>Но я же вообще-то (тайпскрипт) компилирую (веб-проект блин, который вообще по идее должен работать без компиляции!)


Давно тайпскрипт начал без компиляции работать? Да ещё "должен"...
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re: Компиляция javascript: heap out of memory
От: VladCore  
Дата: 30.04.21 22:37
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Дожили

bnk>Падает сборка проекта из-за недостатка памяти (компиляция тайпскрипта). На машине 32гб памяти.

либо нода с урезаной кучей. есть такая кажетяс называется compressed pointer. точнее это не нода, а движок V8 с недавних пор так умеет. куча всего 4 гб. потому что указатели 4х байтовые.

либо кроме тайпскрпита иклюдиш json и картинки в исходники. в этом случае надо столько озу сколько файлов данных умножить на 2-3 или больше.

ну и в качесвте костыля
1 пробовал компилить без source map?
выключается или GENERATE_SOURCEMAP=false или SOURCE_MAP=false или в проекте в зависимости чем компилиш

2 пробовал компилить восьмой нодой? она магическим образом в два раза меньше памяти жрет приэтом на выходе выдает идентичный javascript

bnk>Наверное какая-то переменная окружения? Никто не сталкивался? Я погуглил поверхностно, но наверное не по глазам.


есть NODE_OPTIONS. там можно рамеры разных куч задавать и интенсивность сборщика мусора.
все опции можно посмотреть
node --v8-options
Re: Компиляция javascript: heap out of memory
От: Jester Канада  
Дата: 24.05.22 19:22
Оценка:
Здравствуйте, bnk, Вы писали:


bnk>Дожили

bnk>Падает сборка проекта из-за недостатка памяти (компиляция тайпскрипта). На машине 32гб памяти.
bnk>Наверное какая-то переменная окружения? Никто не сталкивался? Я погуглил поверхностно, но наверное не по глазам.
bnk>Последний раз я похожее видел наверное на плюсах когда компилировал буст со спиритом.

У нас такое было (ангулярный проект), когда компилили в продакшн.
Потыкай в этом направлении:
1. Найди фолдер C:\Users\userName\%AppData%\Roaming\npm.
2. В этом фолдере найди батник ng.cmd.
3. В этом батнике добавь в каждый вызов node.exe такой параметер: --max_old_space_size=8048 (число здесь — количество мегабайт памяти). То есть, если у тебя, скажем, изначально было
node "%~dp0\node_modules\@angular\cli\bin\ng" %*,
то поменяй на
node "--max_old_space_size=8048" "%~dp0\node_modules\@angular\cli\bin\ng" %*

Мы свой проект компилируем как ng serve (в девелопмент) или как ng build --prod (в продакшн), и у нас этот трюк вполне себе работает.
Re[2]: Компиляция javascript: heap out of memory
От: bnk СССР http://unmanagedvisio.com/
Дата: 24.05.22 19:34
Оценка:
Здравствуйте, Jester, Вы писали:

J>Мы свой проект компилируем как ng serve (в девелопмент) или как ng build --prod (в продакшн), и у нас этот трюк вполне себе работает.


У меня не ангуляр, поэтому дословно рецепт неприменим.. Но идея примерно такая же, в итоге сделал так
gulp build --max_old_space_size=8192

Эта штука перезапускает node с новыми параметрами:
> gulp build --max_old_space_size=8192

[09:36:57] Node flags detected: --max_old_space_size=8192
[09:36:57] Respawned to PID: 19268
[09:37:05] ...

Печаль что компиляция тайпскрипта хочет теперь дофига памяти. Это так-то 8, блин, гигабайт.
У меня даже с этим размером иногда валится (когда работает непрерывно, т.е. --watch, может раз в день)
Отредактировано 24.05.2022 19:47 bnk . Предыдущая версия . Еще …
Отредактировано 24.05.2022 19:42 bnk . Предыдущая версия .
Re[4]: Компиляция javascript: heap out of memory
От: vsb Казахстан  
Дата: 03.06.22 19:49
Оценка:
Здравствуйте, DenisCh, Вы писали:

bnk>>Но я же вообще-то (тайпскрипт) компилирую (веб-проект блин, который вообще по идее должен работать без компиляции!)


DC>Давно тайпскрипт начал без компиляции работать? Да ещё "должен"...


"Компиляция" тайпскрипта это вырезание всех типов из кода. Эту "компиляцию" можно в один проход делать с потреблением памяти в несколько сотен байтов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.