简体   繁体   中英

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

When I run an Ionic 3 project using the ionic serve command, then I am getting this error:

致命错误的屏幕截图:堆限制附近的无效标记压缩分配失败 - JavaScript

For a non-angular general answer for those who land on this question from Google:

Every time you face this error its probably because of a memory leak or difference between how Node <= 10 and Node > 10 manage memory. Usually just increasing the memory allocated to Node will allow your program to run but may not actually solve the real problem and the memory used by the node process could still exceed the new memory you allocate. I'd advise profiling memory usage in your node process when it starts running or updating to node > 10.

I had a memory leak. Here is a great article on debugging memory leaks in node.

That said, to increase the memory, in the terminal where you run your Node process:

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

where values of max-old-space-size can be: [2048, 4096, 8192, 16384] etc

[UPDATE] More examples for further clarity:

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.

就我而言,我通过安装 Node.js 版本 12.10.0 解决了这个问题。

I had the same issue on CentOS server 7, but this solved my problem:

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

Where X = (2048 or 4096 or 8192 o..) is the value of memory.

Just type this in the terminal:

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

The error occurs when you exceed the default maximum memory allowed for Node.js. All this does is increase the maximum memory allowed.

Try this solution which was pointed out in an old message on the forum: https://forum.ionicframework.com/t/3-7-0-ios-build-with-prod-not-working/107061/24

Open node_modules/@ionic/app-scripts/bin/ionic-app-scripts.js

Change the first line from:

#!/usr/bin/env node

to

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

Try values 1024 and 2048, but for a relatively large app you may need 4096.

I got the same error when I execute ng build command in Visual Studio code. But I can build successfully when I execute same thing in Windows command line in following sequence.

Step 1.

set NODE_OPTIONS=--max_old_space_size=4096

Step 2.

ng build

I got the same error message when I execute following statements in Visual Studio code. But I can build successfully when I execute same thing in windows command line.

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

In my case it was a recursion that was causing react to use up all memory.

This happened when I was refactoring my code and didn't notice this.

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

In other node apps this might look like:

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

Updating from Node.js 12 to Node.js 14 solved the problem for me.


Update
Now Node.js 16 is available, and I recommend updating to the latest available version of Node.js.

For some reasons all the answer above didn't really work for me, I did the following to fix my issue:

  1. I had to first delete the node_modules folder
  2. re-install node.js on my PC and
  3. then npm install
node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build --baseHref=/baseUrl/ --prod=true

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

adding parameter --build-optimizer resolved the issue in my case.

Update:

I am not sure why adding only --build-optimizer solves the issue but as per angular docs it should be used with aot enabled, so updated command should be like below

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

Angular build docs

Replace the line

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

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

NOTE:

  1. port--4300 is not constant depends upon which port you selects.

  2. --max_old_space_size=5096 too not constant; any value 1024,2048,4096 etc

Run this command in your project folder. Use serve instead of build

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

Instead of using ng build , I have executed below command in terminal to fix this issue.

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

Then do ng serve .

This is how my terminal look like

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

I faced the same problem on Angular. Then I wrote

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

this script to package.json scripts and for me this problem solved.

And run project this command:

npm run serve

For me it was a problem with a Firebase package.

Only add "@firebase/database": "0.2.1" for your package.json file. Reinstall node_modules and it works.

I have deleted the existing node module and run the below commands to fix my issue

npm install -all
npm audit fix

对我来说,我有一个语法错误(没有出现)并导致了这个错误。

Pls check your node version :

 $ node -v

If its 10.1.1 something , then you need to update your root level node version via below commands

 $ 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

Once done pls restart your terminal or visual studio.

It's work 100$

For ionic user pls add the below code in your package.json对于离子用户

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

Another non-angular answer (I was facing the same issue building a react app on AWS Amplify).

As mentioned by Emmanuel it seems that it comes from the difference in the way memory is handled by node v10 vs node v12.

I tried to increase memory with no avail. But using node v12 did it.

Check how you can add nvm use $VERSION_NODE_12 to your build settings as explained by richard

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

只需运行此命令:

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

For a non-Angular general JavaScript answer for those who land on this question from Google and want to fix this in your Dockerfile (replace 6144 with the amount of memory in megabytes which you want to allocate).

My implementation was working in Node.js v14.1.0 being executed by Docker version 20.10.5, build 55c4c88 using DockerOperator in airflow 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

From the control panel go to System -> Advanced system settings -> Environment Variables -> New (user or system)

mceclip0.png

Or this can be done in powershell with:

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

You can also increase this number, if necessary. We've seen folks need to increase this up to 14gb for some larger projects!

Linux/macOS

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

For me, the issue was having an extra node_modules folder that I renamed to node_modules_old and running an npm install to generate a fresh node_modules . Somehow the build must have still been picking up the node_modules_old folder, so I moved node_modules_old out of the directory to fix the issue.

If you are developing on Windows and running into this issue while publishing, upgrade Node.js through the official site: https://nodejs.org/en/download/

The memory usage handling does increase with each newer version of Node, although I did not find exact numbers on what the increase is.

That was the only solution that worked for me. It took a whole weekend and more for me to solve this issue.

Check your folder name. If your folder name having spaces, these kind of issues will generate. Rename without spaces. hope it will work.

如果在 VSCode 上运行 React 应用程序时发生这种情况,请检查您的 propTypes,未定义的 Proptypes 会导致相同的问题。

For me I got this error because I lost access to the output path for the dist folder set in my angular.json file. After I reconnected to the remote path with updated credentials the error went away.

#!/usr/bin/env node --max-old-space-size=4096 in the ionic-app-scripts.js dint work

Modifying

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

By adding:

@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" %* )

Worked fianlly

For me, I encounted this problem when run eslint and prettier fix and formating with a build directory in my React project, after removing it all things worked. I guess this is because there are too many files.

When I run ionic 3 project using ionic serve command, then getting this error:

致命错误的屏幕快照:堆限制分配附近的无效标记压缩无效-Javascript

When I run ionic 3 project using ionic serve command, then getting this error:

致命错误的屏幕快照:堆限制分配附近的无效标记压缩无效-Javascript

When I run ionic 3 project using ionic serve command, then getting this error:

致命错误的屏幕快照:堆限制分配附近的无效标记压缩无效-Javascript

I am using latest stable version of Node v-14.17. I was having the same issue with new Angular Ionic Projects and tried most of the answers above without success.

Finally after upgrading to 16.4.2 LTS fixed this issue.

In my case the error was caused by improper use of the condition in for ... loop. Instead of:

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

I had:

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

Run this command:

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

To check how much you have already:

> node
> v8.getHeapStatistics()
{
  total_heap_size: 6049792,
  total_heap_size_executable: 524288,
  total_physical_size: 5477720,
  total_available_size: 1094444024,
  used_heap_size: 4141728,
  heap_size_limit: 1098907648,
  malloced_memory: 8192,
  peak_malloced_memory: 582752,
  does_zap_garbage: 0,
  number_of_native_contexts: 2,
  number_of_detached_contexts: 0
}

and then heap_size_limit: 1098907648

I had the same problem, in my case after of install aws-sdk, not the memory space. I resolved it changing the import to require like this post:

aws-sdk in node app after deploying does not start

  1. export NODE_OPTIONS="--max-old-space-size=6144" #it will increase to 6gb.

-------If Not Solved try this 2nd step------------- 2) Just update your node version to the latest one will solve this issue.

-------If Not Solved try this 3rd step------------- 3)Just run this command in your windows terminal. set NODE_OPTIONS=--max_old_space_size=4096

Solved!!! (For Angular) After hours of trying to solve this, I finally identified that the reason I keep on getting that error despite trying to increase max_old_space_size is because I had installed the x86 (32bit) version of Node.js on a 64bit computer.

After I saw this I:

  1. deleted chocolatey from C:\\ProgramData\\chocolatey\\bin
  2. uninstalled the x86 (32bit) version on node.js
  3. deleted npm & npm cache folders from C:\\Users\\%username%\\AppData\\Roaming
  4. restarted my computer
  5. installed the x64 version of node
  6. reinstalled angular/cli npm install -g @angular/cli
  7. complied my projects & everything worked without any errors

For me, it was as silly as module importing itself:

// worker.js
import { worker } from './worker'

In the event this is useful for someone. make sure there is not recursion in our Sass. or non exiting recursion in your recently added code. in some cases max heap exceeded is a sign of this.

When I run ionic 3 project using "ionic serve" command than getting this error:

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM