ФАТАЛЬНАЯ ОШИБКА: неэффективные компактные метки, близкие к пределу кучи. Сбой выделения - куча JavaScript из памяти в Ionic 3

Когда я запускаю проект Ionic 3 с помощью команды ionic serve, я получаю следующую ошибку:

ФАТАЛЬНАЯ ОШИБКА: неэффективные компактные метки, близкие к пределу кучи. Сбой выделения - куча JavaScript из памяти в Ionic 3

отметьте этот ответ: stackoverflow.com/questions/38558989/node-js-heap-out-of-mem ory /…

sidverma 02.04.2021 08:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
299
1
484 353
37

Ответы 37

Попробуйте это решение, указанное в старом сообщении на форуме: 3.7.0: сборка iOS с --prod не работает

Открыть 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.

Вы не должны изменять скрипты внутри node_modules.

Faizi 12.03.2021 12:52

У меня была такая же проблема на сервере CentOS 7, но это решило мою проблему:

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

Где X = (2048 or 4096 or 8192 o..) - это значение памяти.

после изменения значения x .. ошибка остается прежней

Sohail Ahmad 13.09.2019 16:05

Если ошибка не исчезнет, ​​продолжайте увеличивать размер до тех пор, пока не будет достаточно памяти для обработки, что в конечном итоге предотвратит ошибку. Единственный раз, когда я обнаружил, что не могу обойти эту ошибку, был ng serve и файл массивный .js, указанный в разделе scriptsangular.json, который необходимо было загрузить в память.

atconway 05.11.2019 23:04

могу ли я установить значение X больше 8192? У меня 32гб оперативной памяти

Diego 27.12.2019 17:36

для меня указание max-old-space-size в командной строке НЕ работало. Это МОЖЕТ быть взаимодействие с узлом на основе nvm? вместо этого внутри сценария bash я использовал 'NODE_OPTIONS = "- max-old-space-size = 2048" node $ NG build --prod --progress = false', который работал, в отличие от 'node --max-old -space-size = 2048 $ NG build --prod --progress = false ', но этого не произошло. Я до сих пор не знаю почему.

Simon H 23.07.2020 12:38

если вы запустите это внутри докера и получите ошибку KILLED, также увеличьте объем оперативной памяти, выделенной для движка докера.

Nima Ajdari 17.03.2021 10:59

Для меня это была проблема с пакетом Firebase.

Добавьте только "@ firebase / database": "0.2.1" для вашего файла package.json. Переустановите node_modules, и он работает.

аа> Пакет Firebase или пакет Firebase?
Peter Mortensen 30.09.2021 14:10
node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build --baseHref=/baseUrl/ --prod=true

Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, улучшает его долгосрочную ценность.

Eric Leschinski 17.06.2019 03:07

В моем случае я решил эту проблему, установив Node.js версии 12.10.0.

То же самое. Я только что поменял версию и работает.

brunocascio 20.11.2019 19:40

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

Derek Dowling 19.12.2019 02:20

У меня больше ничего не работало, вот и все. Большое спасибо :)

Hussain Alaidarous 07.01.2020 13:54

Мы обновились до узла 12, и ошибка исчезла, это проще, чем управлять кучей на узле 10.

Raffaeu 25.05.2020 11:12

Это устранило проблему. Это следует принять как ответ

Nitish Kumar 27.05.2020 20:33

@NitishKumar Я все еще получаю сообщение об ошибке с Node 12 / пожимаю плечами. Принято должно быть то, что лучше всего решает вариант использования OP - хотя вы бы надеялись, что они выберут один из ответов на этом этапе.

ruffin 22.06.2020 22:35

этот работал только для меня, но в угловом проекте.

Anup Bangale 30.06.2020 13:40

@DerekDowling Wayback вызывает неработающую ссылку: web.archive.org/web/20191103115941/https://…

Grim 27.08.2020 10:15

Я использую узел 12.18.3 и получил эту ошибку.

RyanNerd 12.05.2021 12:09

Я использовал узел 11.15.0, при сборке получилось «Ошибка выделения - нехватка памяти JavaScript». После обновления до узла 12.10.0 (nvm install 12.10.0) все работает как шарм !!!

Alphonse R. Dsouza 24.11.2021 11:03

Запустите эту команду в папке вашего проекта. Используйте обслуживать вместо build

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

Я получил такое же сообщение об ошибке, когда выполнил следующие инструкции в Visual Studio Code. Но я могу успешно построить, если выполняю то же самое в командной строке 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

Проверьте название вашей папки. Если в имени вашей папки есть пробелы, возникнут проблемы такого рода. Переименовать без пробелов.

Я удалил существующий модуль Node.js и выполнил следующие команды, чтобы исправить свою проблему:

npm install -all
npm audit fix

Для общего ответа, не связанного с Angular, для тех, кто задает этот вопрос от Google:

Каждый раз, когда вы сталкиваетесь с этой ошибкой, это, вероятно, связано с утечкой памяти или разницей между тем, как Node.js <= 10 и Node.js> 10 управляют памятью.

Обычно простое увеличение объема памяти, выделенной для Node.js, позволяет вашей программе запускать но на самом деле не может решить реальную проблему, а объем памяти, используемый процессом node, может превышать объем новой памяти, которую вы выделяете. Я бы посоветовал профилировать использование памяти в вашем процессе Node.js, когда он запускается или обновляется до Node.js> 10.

У меня была утечка памяти. Вот отличная статья об отладке утечек памяти в Node.js.

Тем не менее, чтобы увеличить объем памяти в терминале, где вы запускаете процесс Node.js:

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 5 GB
export NODE_OPTIONS = "--max-old-space-size=6144" # Increase to 6 GB
export NODE_OPTIONS = "--max-old-space-size=7168" # Increase to 7 GB
export NODE_OPTIONS = "--max-old-space-size=8192" # Increase to 8 GB

# and so on...

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

# 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.

К вашему сведению, значение по умолчанию - 512 МБ. Вам не нужно сразу переходить к 10-кратному увеличению, вы можете сначала попробовать что-то между 512 и 5120.

Cameron Hudson 23.06.2020 00:42

Спасибо, это работает для всех типов приложений, имеющих проблемы с памятью.

invinciblemuffi 12.08.2020 09:10

Сразу хочу отметить - это не всегда свидетельствует об утечке памяти. Возможно, используемая вами библиотека использует немного больше памяти, чем раньше. Для нас next.js начал сбой нашего приложения из-за функции быстрого обновления.

Daniel Cooke 20.10.2020 14:09

@DanielCooke, какое значение вы использовали для следующего js? не могли бы вы поделиться, какое решение вы использовали для этой проблемы, со следующими js

MSD 04.12.2020 21:58

@MSD Мы, кажется, обойдемся с 4096 max-old-space-size со следующим> 9.6. Для производственных сборок и разработчиков

Daniel Cooke 09.12.2020 15:11

@DanielCooke спасибо ... пробовал, что у меня не работает

MSD 11.12.2020 13:11

Вот документы nodejs.org/api/…, и ничего не говорит о том, что должны быть шаги integer * 1024.

Mikhail Vasin 21.07.2021 15:40

@MikhailVasin Смотрите самые последние комментарии в моем ответе. Я знаю, что это не так. Я просто поместил это там для тех, кто хочет увеличить общую память в ГБ.

Emmanuel N K 21.07.2021 20:30

По некоторым причинам все предыдущие ответы не работали для меня. Я сделал следующее, чтобы исправить свою проблему:

  1. Пришлось сначала удалить папку node_modules
  2. переустановите Node.js на моем ПК и
  3. затем npm install

шаг 2 не является обязательным. Я попробовал верхнее решение, и оно сработало для меня и без шага 2.

Analyst 22.09.2020 09:45

ну, возможно, вам не понадобится шаг 2, я поделился только тем, что сработало для меня :)

sambayour 21.11.2020 00:43

Если это происходит при запуске приложения React в Visual Studio Code, проверьте свои propTypes, undefined Proptypes приводит к той же проблеме.

Заменить строку

"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. порт - 4300 не является постоянным, зависит от того, какой порт вы выбираете.

  2. --max_old_space_size = 5096 тоже не постоянный; любое значение 1024,2048,4096 и т. д.

Этот сработал для меня. Установка NODE_OPTIONS из командной строки не сработала, я предполагаю, потому что Visual Studio использует новый процесс или что-то в этом роде. Жесткое кодирование изменений в моем блоке package.json scripts решило эту проблему.

user101289 30.03.2021 16:46

Для меня я получил эту ошибку, потому что я потерял доступ к пути вывода для папки dist, установленной в моем файле angular.json. После того, как я повторно подключился к удаленному пути с обновленными учетными данными, ошибка исчезла.

У меня такая же ошибка, когда я выполняю команду ng build в Visual Studio Code. Но я могу успешно выполнить сборку, если выполняю то же самое в командной строке Windows в следующей последовательности.

Шаг 1.

set NODE_OPTIONS=--max_old_space_size=4096

Шаг 2.

ng build

Спасибо, что мне очень помогло, просто переключил мой терминал

Gayatri Dipali 09.01.2021 11:02

В моем случае это был рекурсия, который заставлял React использовать всю память.

Это произошло, когда я реорганизовал свой код и не заметил этого.

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

В других приложениях Node.js это может выглядеть так:

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

Почему возникла проблема? <> </> должно быть действительным в React вместо использования <React.Fragment>, верно?

Joelgullander 18.03.2020 14:44

@Codehiker Да, это новый синтаксис в React 16

Rusty 19.03.2020 21:13

Рекурсия состоит в том, что SumComponent содержит SumComponent (который содержит SumComponent, который содержит SumComponent ...)

stone 09.06.2020 09:11

Добавление параметра --build-optimizer решило проблему в моем случае:

node --max_old_space_size=4096 ./node_modules/@angular/cli/bin/ng build --prod --build-optimizer

Я не уверен, почему добавление только --build-optimizer решает проблему, но в соответствии с документацией Angular его следует использовать с включенной компиляцией с опережением времени (AOT), поэтому обновленная команда должна быть такой, как показано ниже:

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

Документация по сборке Angular

Для меня проблема заключалась в наличии дополнительной папки node_modules, которую я переименовал в node_modules_old, и запуске npm install для создания нового node_modules. Каким-то образом сборка, должно быть, все еще собирала папку node_modules_old, поэтому я переместил node_modules_old из каталога, чтобы исправить проблему.

Пожалуйста, проверьте свою версию Node.js:

   node -v

Если это что-то из 10.1.1, вам необходимо обновить версию Node.js корневого уровня с помощью следующих команд:

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

После этого перезапустите терминал или Visual Studio.

Работает 100 $.

Для пользователей Ionic добавьте приведенный ниже код в свой package.json.

For Ionic user

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

на самом деле это работает, если вы создаете сеть через app-scripts, но если вы создаете Android или скрипт, например ionic cordova build android, как?

Muhammed Moussa 20.07.2020 18:21

#!/usr/bin/env node --max-old-space-size=4096 в файле ionic-app-scripts.js не работал.

Изменение node_modules / .bin / ionic-app-scripts.cmd путем добавления

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\..\@ionic\app-scripts\bin\ionic-app-scripts.js" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node --max_old_space_size=4096  "%~dp0\..\@ionic\app-scripts\bin\ionic-app-scripts.js" %*
)

наконец-то сработало.

Еще один ответ, не относящийся к Angular (я столкнулся с той же проблемой при создании приложения React на AWS Amplify).

Как упоминал Эммануэль, похоже, что это происходит из-за разницы в способе обработки памяти в Node.js v10 и Node.js v12.

Пробовал увеличить память безрезультатно. Но использование Node.js 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

Что касается меня, я столкнулся с этой проблемой при запуске ESLint, исправлении Красивее и форматировании с помощью каталога build в моем проекте React. После удаления все заработало.

Я думаю, это потому, что файлов слишком много.

Я думаю, есть много способов достичь этой ошибки!

На моей стороне у меня в package.json была петля. Проект A зависел от проекта B, который зависел от проекта A.

Иногда простота является ключом к успеху. Найдите while (i <= 10000) {} без увеличения i в вашем коде;)

Эта проблема исчезла после того, как я обновил все свои библиотеки, такие как Node.js, TypeScript, Пряжа, npm и т. д. Для моего проекта.

Просто введите это в терминал:

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

Ошибка возникает, когда вы превышаете максимальный объем памяти по умолчанию, разрешенный для Node.js. Все это увеличивает максимально допустимую память.

Это решение, если вы работаете с оболочкой

Kareem Khaleel 02.09.2021 12:43

Обновление с Node.js 12 до Node.js 14 решило проблему для меня.


Обновлять
Теперь доступен Node.js 16, и я рекомендую обновить его до последней доступной версии Node.js.

Для меня у меня была синтаксическая ошибка (которая не отображалась) и вызвала эту ошибку.

Я была такая же проблема. Спасибо!

Ajay Lingayat 30.03.2021 21:59

В моем случае забыли убрать запятую в конце ngClass. Надеюсь, это может кому-то помочь.

Terry Windwalker 30.10.2021 10:54

У меня аналогичная проблема, когда я запускаю angular 'ng serve':

"FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory"

В моем случае я обнаружил, что мое приложение Angular использует отложенную загрузку. Один модуль уже был импортирован в сам модуль маршрута, но кто-то также импортировал его в модуль приложения, что вызвало рекурсивную (?) Загрузку.

Это вызывает нехватку памяти.

Просто запустите эту команду:

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

Вместо использования ng build я выполнил следующую команду в терминале, чтобы исправить эту проблему.

 node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng build --prod

Тогда сделайте ng serve.

Так выглядит мой терминал

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Try the new cross-platform PowerShell https://aka.ms/pscore6

PS D:\ProjectPath\Project1> node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng build --prod
--prod устарел, используйте вместо него --configuration production.
DFSFOT 06.06.2021 21:22

Для общего ответа JavaScript, не относящегося к Angular, для тех, кто задает этот вопрос от Google и хочет исправить это в вашем Dockerfile (замените 6144 объемом памяти в мегабайтах, который вы хотите выделить).

Моя реализация работала в Node.js v14.1.0, выполняемом Docker версии 20.10.5, сборка 55c4c88 с использованием DockerOperator в воздушный поток v2.0.1).

FROM node:14.1.0

# Create app directory
WORKDIR /tmp/dockerspace/

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
COPY package*.json ./

RUN npm install

# Bundle app source
COPY . .

CMD node --max-old-space-size=6144 app.js

Если вы разрабатываете для Windows и столкнулись с этой проблемой при публикации, обновите Node.js с помощью официальный сайт.

Обработка использования памяти увеличивается с каждой новой версией Node.js, хотя я не нашел точных цифр того, что это за увеличение.

Это было единственное решение, которое сработало для меня. Мне потребовались целые выходные и больше, чтобы решить эту проблему.

Я столкнулся с той же проблемой на Angular. Затем я написал

"serve": "node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng serve"

этот скрипт к скриптам package.json и для меня эта проблема решена.

И запустите проект эту команду:

npm run serve

Это почти непонятно. Ты можешь починить это?

Peter Mortensen 25.10.2021 01:28

Прежде всего, вы должны добавить скрипт в блок скриптов в package.json, в конце концов, вы должны запустить проект с помощью этой команды: npm run serve - @PeterSmith

Ali Alizade 26.10.2021 09:37

Я использую последнюю стабильную версию Node.js v-14.17. У меня была такая же проблема с новыми проектами Angular Ionic, и я безуспешно пробовал большинство предыдущих ответов.

Наконец, после обновления до Node.js 16.4.2 LTS эта проблема была исправлена.

В моем случае ошибка была вызвана неправильным использованием условия в цикле for .... Вместо того:

for (let t = startNo; t <= endNo; t++) {}

Я имел:

for (let t = startNo; endNo; t++) {}

Окна

Из панели управления перейдите в СистемаРасширенные системные настройкиПеременные средыНовый (пользователь или система)

mceclip0.png

Или это можно сделать в PowerShell с помощью:

$env:NODE_OPTIONS = "--max-old-space-size=8192"

При необходимости вы также можете увеличить это число. Мы видели, что людям нужно увеличить это до 14 ГБ для некоторых более крупных проектов!

Linux / macOS

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

У меня nodeJS 10.15.3, я пробовал решение NODE-OPTIONS в Windows 10, но оно не сработало. Есть ли другие решения?

VenomBerry 05.10.2021 12:07

@VenomBerry, не могли бы вы запустить WSL? Зачем причинять себе вред, запуская эти вещи в стандартных окнах без подсистемы Linux.

Evert 18.10.2021 20:21

Другие вопросы по теме