ФАТАЛЬНА ПОМИЛКА: Неефективні ущільнення міток біля межі купи Не вдалося розподілити - купа JavaScript вийшла з пам'яті в ionic 3


Відповіді:


164

Для загальної відповіді, яка не стосується кута, для тих, хто потрапляє на це питання від Google:

Кожного разу, коли ви стикаєтеся з цією помилкою, це, ймовірно, через витік пам'яті або різницю між тим, як Node <= 10 і Node> 10 керують пам'яттю. Зазвичай просто збільшення пам'яті, виділеної Node, дозволить вашій програмі працювати, але насправді не може вирішити справжню проблему, і пам'ять, що використовується процесом вузла, все одно може перевищувати нову пам'ять, яку ви виділите. Я б порадив профілювати використання пам'яті у вашому процесі вузла, коли він починає запускатися або оновлюватися до вузла> 10.

У мене витік пам’яті. Ось чудова стаття про налагодження витоків пам'яті у вузлі.

Тим не менш, для збільшення пам’яті в терміналі, де ви запускаєте процес Node:

export NODE_OPTIONS="--max-old-space-size=8192"

де значення max-old-space-sizeможуть бути: [2048, 4096, 8192, 16384]і т.д.

[ОНОВЛЕННЯ] Інші приклади для подальшої наочності:

export NODE_OPTIONS="--max-old-space-size=5120" #increase to 5gb
export NODE_OPTIONS="--max-old-space-size=6144" #increase to 6gb
export NODE_OPTIONS="--max-old-space-size=7168" #increase to 7gb
export NODE_OPTIONS="--max-old-space-size=8192" #increase to 8gb

# and so on...

# formula:
export NODE_OPTIONS="--max-old-space-size=(X * 1024)" #increase to Xgb

# Note: it doesn't have to be multiples of 1024. 
# max-old-space-size can be any number of memory megabytes(MB) you have available.

14
FYI, за замовчуванням 512 МБ. Вам не потрібно переходити прямо до 10-кратної кількості, спершу можна спробувати щось між 512 і 5120.
Cameron Hudson

Дякуємо, це працює для всіх типів додатків, що мають проблеми з пам’яттю.
непереможний

5
Просто хочу зазначити - це не завжди свідчить про витік пам'яті. Можливо, бібліотека, якою ви користуєтесь, використовує трохи більше пам'яті, ніж раніше. Ми next.jsпочали розбивати наш додаток із функцією швидкого оновлення.
Даніель Кук,

@DanielCooke, яке значення ви використовували для наступного js? Ви можете поділитися, будь-яким рішенням, яке ви використали для цього випуску, із наступним js
MSD

@MSD Ми, здається, справляємося з 4096-макс-старим-простором із наступним> 9,6. Для виробничих збірок та розробки
Деніел Кук,

64

У моєму випадку виправте цю проблему при встановленні NodeJs, версія 12.10.0


1
Те ж саме. Я щойно змінив версію та її роботи.
brunocascio

9
Для контексту Node 12 має іншу стратегію керування кучею, яка базується на доступній пам'яті, а не на використанні за замовчуванням. Детальніше тут: foundation.nodejs.org/announcements/2019/04/24/…
Дерек Даулінг

Більше нічого у мене не працювало, це було все. Щиро дякую :)
Хуссей Помітний

Ми оновились до Node 12, і помилка зникла, простіше, ніж керувати
кучею

1
@DerekDowling Wayback причина посилання порушено: web.archive.org/web/20191103115941/https://…
Grim

63

та сама проблема на сервері centos 7, але це вирішило мою проблему:

node --max-old-space-size=X node_modules/@angular/cli/bin/ng build --prod

Де X = (2048 or 4096 or 8192 o..)цінність пам’яті


2
після зміни значення х .. помилка залишається незмінною
Сохаїл Ахмад

Якщо помилка не зникає, продовжуйте збільшувати розмір, поки не вистачить пам'яті для обробки, що врешті-решт запобіжить помилці. Єдиний раз , коли я виявив , що я не міг пройти повз цієї помилки був з ng serveі а масивний .js файл , вказаний в scriptsрозділі , angular.jsonякий необхідно завантажити в пам'ять.
atconway

чи можу я встановити значення X більше 8192? У мене 32 ГБ оперативної пам'яті
Дієго,

для мене подання max-old-space-size у командному рядку НЕ працювало. Це МОЖЕ бути взаємодією з nvm-вузлом? натомість всередині сценарію bash я використовував 'NODE_OPTIONS = "- max-old-space-size = 2048" вузол $ NG build --prod --progress = false', який працював, на відміну від 'node --max-old -space-size = 2048 $ NG build --prod --progress = false ', що ні. Я досі не знаю чому.
Simon H

26

Спробуйте це рішення, на яке було вказано у старому повідомленні на форумі: https://forum.ionicframework.com/t/3-7-0-ios-build-with-prod-not-working/107061/24

відчинено node_modules/@ionic/app-scripts/bin/ionic-app-scripts.js

Змініть перший рядок із:

#!/usr/bin/env node

до

#!/usr/bin/env node --max-old-space-size=4096

Спробуйте значення 1024 і 2048, але для відносно великого додатка вам може знадобитися 4096.


25

Я отримав ту ж помилку під час виконання ng build команду в коді Visual Studio. Але я можу успішно будувати, коли виконую те саме в командному рядку Windows у такій послідовності.

Крок 1.

set NODE_OPTIONS=--max_old_space_size=4096

Крок 2.

ng build

Дякую, що мені дуже допомогло, просто переключив свій термінал
Гаятрі Діпалі

11

Я отримав те саме повідомлення про помилку, коли виконую наступні оператори в коді Visual Studio. Але я можу успішно будувати, коли виконую те саме в командному рядку Windows.

npm install -g increase-memory-limit
increase-memory-limit
set NODE_OPTIONS=--max_old_space_size=4096
ng build -c deploy --build-optimizer --aot --prod --sourceMap

7
node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build --baseHref=/baseUrl/ --prod=true

21
Хоча цей код може відповісти на питання, надаючи додатковий контекст щодо того, чому та / або як цей код відповідає на питання, покращує його довгострокове значення.
Ерік Лещинський,

7

З якихось причин усі відповіді, наведені вище, для мене насправді не працювали, я зробив наступне, щоб виправити свою проблему:

  1. Спочатку мені довелося видалити node_modules папку
  2. перевстановіть node.js на моєму ПК і
  3. тоді npm install

крок 2 не є обов’язковим. Я спробував верхнє рішення, і воно працювало для мене і без кроку 2
аналітик

ну вам може не знадобитися крок 2, я поділився лише тим, що мені
вдалося

5

Замініть рядок

"start": "ng serve -o --port 4300 --configuration=en" з

"start": "node --max_old_space_size=5096 node_modules/@angular/cli/bin/ng serve -o --port 4300 --configuration=en"

ПРИМІТКА:

  1. port - 4300 не є постійним, залежить від того, який порт ви вибрали.

  2. --max_old_space_size = 5096 занадто непостійний; будь-яке значення 1024,2048,4096 тощо


5

У моєму випадку це була рекурсія, яка викликала реакцію, щоб зайняти всю пам’ять.

Це сталося, коли я переробляв свій код і не помітив цього.

const SumComponent = () => {
  return (
    <>
      <SumComponent />
    </>
  ) 
}

В інших програмах вузлів це може виглядати так:

const someFunction = () => {
  ...
  someFunction(); 
  ...
}

1
Чому це було проблемою? <> </> має бути дійсним у React замість використання <React.Fragment>, правда?
Йоелгулландер,

@Codehiker Так, це новий синтаксис у React 16
Rusty

4
Рекурсія полягає в тому, що SumComponentмістить SumComponent(що містить, SumComponentщо містить SumComponent...)
камінь

5

вузол --max_old_space_size = 4096 ./node_modules/@angular/cli/bin/ng build --prod --build-optimizer

додавання параметра --build-optimizer вирішило проблему в моєму випадку.

Оновлення:

Я не впевнений, чому додавання лише - build-optimizer вирішує проблему, але відповідно до angular docs його слід використовувати з увімкненим aot, тому оновлена ​​команда повинна виглядати нижче

--build-optimizer=true --aot=true

Документи кутової збірки


4

Запустіть цю команду у папці проекту. Використовуйте службу замість побудови

node --max_old_space_size=8000 node_modules/@angular/cli/bin/ng serve  --prod --port=4202

3

Для мене це була проблема з пакетом firebase.

Додайте лише "@ firebase / database": "0.2.1" для вашого package.json, переінсталюйте node_modules і працює.



2

Я видалив існуючий модуль вузла та запустив наведені нижче команди, щоб виправити свою проблему

npm install -all
npm audit fix

2

Будь ласка, перевірте версію вашого вузла:

   $  node -v

Якщо це 10.1.1, то вам потрібно оновити версію вузла кореневого рівня за допомогою команд нижче

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash


$ source ~/.nvm/nvm.sh

$ nvm ls

$ nvm install 12.18.1

Після закінчення, будь ласка, перезапустіть термінал або візуальну студію.

Це робота 100 $

Для іонних користувачів, будь ласка, додайте код нижче у ваш package.json для іонного користувача

 "ionic:build": "node --max-old-space-size=16384 ./node_modules/@ionic/app-scripts/bin/ionic-app-scripts.js build",
    


насправді це працює, якщо ваша побудова Інтернету закінчується app-scripts, але якщо ви збираєте андроїд або сценарій, ionic cordova build androidяк?
Мухаммед Мусса

2

Ще одна некутова відповідь (я стикався з тією ж проблемою, створюючи додаток для реагування на AWS Amplify).

Як згадував Еммануель, здається, що це походить від різниці в способі обробки пам'яті вузлом v10 та вузлом v12.

Я намагався збільшити пам'ять безрезультатно. Але за допомогою node v12 це вдалося.

Перевірте, як ви можете додати nvm use $VERSION_NODE_12налаштування збірки, як пояснив Річард

frontend:
  phases:
    preBuild:
      commands:
        - nvm use $VERSION_NODE_12
        - npm ci
    build:
      commands:
        - nvm use $VERSION_NODE_12
        - node -v
        - npm run-script build

1

Для мене проблема полягала в наявності додаткової node_modulesпапки, яку я перейменовував, node_modules_oldта запуску npm installдля створення нової node_modules. Якось збірка, напевно, все ще забирала node_modules_oldпапку, тому я node_modules_oldвийшов із каталогу, щоб вирішити проблему.


1

Просто введіть це в терміналі:

export NODE_OPTIONS="--max-old-space-size=8192"

1

Для мене у мене була синтаксична помилка (яка не відображалася) і спричинила цю помилку.


0

Перевірте назву вашої папки. Якщо у назві вашої папки є пробіли, такі проблеми виникнуть. Перейменувати без пробілів. сподіваюся, це спрацює.


0

Якщо це трапляється під час запуску програми React на VSCode, перевірте свої propTypes, невизначені Proptypes призводять до тієї ж проблеми.


0

Для мене я отримав цю помилку, оскільки втратив доступ до вихідного шляху для папки dist, встановленої у моєму файлі angular.json. Після повторного підключення до віддаленого шляху з оновленими обліковими даними помилка зникла.


0

#! / usr / bin / env вузол --max-old-space-size = 4096 у роботі int ionic-app-scripts.js

Модифікуючи

node_modules / .bin / ionic-app-scripts.cmd

Додавши:

@IF ІСНУЄ "% ~ dp0 \ node.exe" ("% ~ dp0 \ node.exe" "% ~ dp0 .. @ ionic \ app-scripts \ bin \ ionic-app-scripts.js"% *) Інакше ( @SETLOCAL @SET PATHEXT =% PATHEXT:;. JS; =;% node --max_old_space_size = 4096 "% ~ dp0 .. @ ionic \ app-scripts \ bin \ ionic-app-scripts.js"% *)

Працював по-доброму


0

Для мене я зіткнувся з цією проблемою під час запуску eslint та красивішого виправлення та форматування за допомогою buildкаталогу у моєму проекті React, після того як видалив його, і всі речі спрацювали. Я думаю, це тому, що файлів занадто багато.


0

Думаю, існує безліч способів досягти цієї помилки!

На моєму боці у мене була петля package.json. Проект А мав залежність від проекту Б, який мав залежність від проекту А.


0

Іноді простота є запорукою успіху. Шукайте while (i <= 10000) {}без збільшення iвашого коду;)


0

Цю проблему не було, після того як я оновив усі свої бібліотеки, такі як nodejs, typecript, yarn, npm тощо для свого проекту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.