Cowborg
Cowborg

Reputation: 2871

npm build gives "Ineffective mark-compacts near heap limit Allocation failed"

I have a reactjs/typescript project, running on windows 10. Im trying to build by ts-scripts with

"rimraf ../wwwroot/* && react-scripts-ts build && copyfiles ./build/**/* ../wwwroot/ -u 1

This has worked ok before, but when I removed the node_modules-folder, re-run the npm install-command and then the command above I get the error message

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

I have no idea why. After googling Ive seen

NODE_OPTIONS="–max-old-space-size=2048" but I dont know where to put this

Full error message

Last few GCs

[11376:0000024682F49880]    60039 ms: Mark-sweep 2034.1 (2085.2) -> 2033.7 (2085.2) MB, 1029.4 / 0.0 ms  (average mu = 0.073, current mu = 0.006) allocation failure scavenge might not succeed
[11376:0000024682F49880]    61094 ms: Mark-sweep 2034.4 (2085.2) -> 2034.1 (2085.7) MB, 1047.7 / 0.0 ms  (average mu = 0.039, current mu = 0.007) allocation failure scavenge might not succeed


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

    0: ExitFrame [pc: 000001CDF84DC5C1]
Security context: 0x007044b9e6e1 <JSObject>
    1: bindChildrenWorker(aka bindChildrenWorker) [000001AD1C0ACD59] [C:\Users\robcar\source\repos\Boost\Boost.Web\ClientApp\node_modules\typescript\lib\typescript.js:~27657] [pc=000001CDF8FA47CA](this=0x03da79d826f1 <undefined>,node=0x034b8724ab71 <NodeObject map = 000000660468F931>)
    2: bind(aka bind) [000001AD1C0AE2D9] [C:\Users\robcar\source\repos\B...

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 00007FF6B5EA121A v8::internal::GCIdleTimeHandler::GCIdleTimeHandler+4810
 2: 00007FF6B5E7A5B6 node::MakeCallback+4518
 3: 00007FF6B5E7AFA0 node_module_register+2160
 4: 00007FF6B610B3EE v8::internal::FatalProcessOutOfMemory+846
 5: 00007FF6B610B31F v8::internal::FatalProcessOutOfMemory+639
 6: 00007FF6B6649304 v8::internal::Heap::MaxHeapGrowingFactor+11476
 7: 00007FF6B663FA67 v8::internal::ScavengeJob::operator=+25543
 8: 00007FF6B663DFDC v8::internal::ScavengeJob::operator=+18748
 9: 00007FF6B6646F57 v8::internal::Heap::MaxHeapGrowingFactor+2343
10: 00007FF6B6646FD6 v8::internal::Heap::MaxHeapGrowingFactor+2470
11: 00007FF6B61E9DD7 v8::internal::Factory::NewFillerObject+55
12: 00007FF6B6281ABA v8::internal::WasmJs::Install+29530
13: 000001CDF84DC5C1

Upvotes: 36

Views: 101804

Answers (9)

mcdmaster
mcdmaster

Reputation: 1

I have been struggling with this issue in my Nuxt.js environment as well.

As everyone says here, appllying the --max_old_space_size={size} with robust amount provided seemed to work for me. However, since I made some additional remediation on my Nuxt.js app stack, the same symptom has reappeared...

Furthermore, I also tried the Node.js option --heapsnapshot-near-heap-limit={number} and it SEEMED to work, not persistently.

Anyway, along with searching for another fix via here or somewhere else, I intened to do the cord review so that I can expect if there is something redundant within our application stack.

Upvotes: 0

Fady Y
Fady Y

Reputation: 1

This is what I wrote in my package.json run command

"scripts": { "build": "node --max_old_space_size=4096 build/build.js" }

basically, you have to run --max_old_space_size=4096 before your actual build command

Upvotes: 0

Muhammad Tariq
Muhammad Tariq

Reputation: 4654

The root cause of the problem is the large source file sizes.

You can resolve the issue in 2 steps.

  1. First try to increase space size and check the application. If the problem is cause by your source code, then this can be resolved by increasing the Node Heap Size as below,
"start": "react-scripts --max_old_space_size=4096 start",
"build": "react-scripts --max_old_space_size=4096 build"
  1. Second step is setting the Environment Variable. If the problem lies within your dependencies, you may need to increase the Node Heap allocation globally to resolve the issue.
    For Windows: set NODE_OPTIONS=--max_old_space_size=4096
    For Linux: export NODE_OPTIONS=--max_old_space_size=4096

Also note that, if you are using very low memory like 512MB, then you will have to upgrade it to at least 2GB to get the better result.

Here I used 4096MB = 4GB size, but you can change this according to your machine configuration specifically RAM. You can set it to 2GB or 1GB and check the application.

Upvotes: 5

Ganesan Js
Ganesan Js

Reputation: 162

I got a fix after increasing the node max_old_space. Here is the fix.

Instead of running npm start or ng start. Run the below command

node --max_old_space_size=8048 ./node_modules/@angular/cli/bin/ng serve

OR

You can add the command in package.json file as well

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

Upvotes: 9

eespejel
eespejel

Reputation: 401

I had a similar issue, although on a Mac computer. Setting an environment variable did the trick for me. That way, your node process will take the value and use it independently of which script you're running.

export NODE_OPTIONS=--max_old_space_size=4096

The run your command again. Good Luck!

Upvotes: 38

foxbit
foxbit

Reputation: 341

I don't think that the solution is to increase memory limit. This way the issue is always postponed.

I've encounter this issue 2 times. I've solved, for each time:

  1. using a specific version of node (v12.11.1, react v16.13.1 and react-scripts v3.2.0);
  2. switching from npm to yarn (node v12.11.1, react v16.13.1 and react-scripts v3.4.1).

In addition, check your package.json, delete package-lock.json, remove node-modules folder and try to install your dependencies again.

Next try to build your project.

Upvotes: 3

Onen simon
Onen simon

Reputation: 768

The solution which I used was to upgrade the node js version from v10 to v12.


The command export NODE_OPTIONS=--max_old_space_size=4096 works but has limitations, e.g. you should have ample memory on your machine to run the production build.

Upvotes: 18

Shezan Kazi
Shezan Kazi

Reputation: 4660

I have been facing this problem for some time. The problem is most likely caused by a dependancy or component which is a large .js file. I am currently using this package to successfully fix the issue.

You basically install it globally:

npm install -g increase-memory-limit

And then from within your project root you run:

increase-memory-limit

Which will append --max-old-space-size=4096 in all node calls inside your node_modules/.bin/* files.

Upvotes: -4

joaopribs
joaopribs

Reputation: 658

I had the same issue on Windows. The solution was to set the NODE_OPTIONS variable before running npm run build. To set this variable, simply run set NODE_OPTIONS=--max_old_space_size=8192

Upvotes: 12

Related Questions