I had a pretty big blog meltdown recently after I went to push a new post and the build failed with a mysterious “out of memory” error. I’ve had issues locally with AstroJS running a bit slow when building pages in development, so I can imagine it was probably doing heavy lifting during production builds. I was able to build locally - but I’m assuming the Netlify build servers didn’t have 32GB of RAM to kick around.

I thought I’d share the simple solution I found to fix my AstroJS builds and the JavaScript heap allocation error.

The Error

If you’re here, you’ve probably encountered this error in your Netlify (or build server) logs:

4:14:28 PM: <--- Last few GCs --->
4:14:28 PM: [1503:0x6a81c70]    79191 ms: Mark-sweep 2006.9 (2075.6) -> 1985.3 (2068.9) MB, 812.3 / 0.0 ms  (average mu = 0.178, current mu = 0.032) allocation failure scavenge might not succeed
4:14:28 PM: [1503:0x6a81c70]    80470 ms: Mark-sweep 2013.4 (2081.2) -> 1988.5 (2072.4) MB, 1256.8 / 0.0 ms  (average mu = 0.087, current mu = 0.018) allocation failure scavenge might not succeed
4:14:28 PM: <--- JS stacktrace --->
4:14:28 PM: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
4:14:28 PM:  1: 0xb08e80 node::Abort() [/opt/buildhome/.nvm/versions/node/v16.19.0/bin/node]
4:14:28 PM:  2: 0xa1b70e  [/opt/buildhome/.nvm/versions/node/v16.19.0/bin/node]
4:14:28 PM:  3: 0xce1890 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/opt/buildhome/.nvm/versions/node/v16.19.0/bin/node]
4:14:28 PM:  4: 0xce1c37 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/opt/buildhome/.nvm/versions/node/v16.19.0/bin/node]
4:14:28 PM:  5: 0xe992a5  [/opt/buildhome/.nvm/versions/node/v16.19.0/bin/node]
4:14:28 PM:  6: 0xe99d86  [/opt/buildhome/.nvm/versions/node/v16.19.0/bin/node]
4:14:28 PM:  7: 0xea82ae  [/opt/buildhome/.nvm/versions/node/v16.19.0/bin/node]
4:14:28 PM:  8: 0xea8cf0 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/opt/buildhome/.nvm/versions/node/v16.19.0/bin/node]
4:14:28 PM:  9: 0xeabc6e v8::internal::Heap::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/opt/buildhome/.nvm/versions/node/v16.19.0/bin/node]
4:14:28 PM: 10: 0xe6d1aa v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationType, v8::internal::AllocationOrigin) [/opt/buildhome/.nvm/versions/node/v16.19.0/bin/node]
4:14:28 PM: 11: 0x11e5f96 v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [/opt/buildhome/.nvm/versions/node/v16.19.0/bin/node]
4:14:28 PM: 12: 0x15d9c19  [/opt/buildhome/.nvm/versions/node/v16.19.0/bin/node]
4:14:29 PM: Aborted (core dumped)
4:14:29 PM: error Command failed with exit code 134. (https://ntl.fyi/exit-code-134)
4:14:29 PM: info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
4:14:29 PM:
4:14:29 PM:   "build.command" failed
4:14:29 PM: ────────────────────────────────────────────────────────────────
4:14:29 PM:
4:14:29 PM:   Error message
4:14:29 PM:   Command failed with exit code 134: yarn build (https://ntl.fyi/exit-code-134)
4:14:29 PM:
4:14:29 PM:   Error location
4:14:29 PM:   In Build command from Netlify app:
4:14:29 PM:   yarn build

The Solution

After a bit of research and checking the AstroJS, I found an automated post merging an Astro Docs commit that mentioned “netlify memory”. Taking a look at the commit, it seems that they added a Netlify configuration file (netlify.toml) with a custom build script. ]

The script essentially has an extra flag for increasing the amount of memory available (--max_old_space_size=4096). And it uses pnpm instead of yarn — which might improve performance as well.

Creating a netlify.toml in my site root and pushing that commit got everything working!

[build]
  command = "NODE_OPTIONS=--max_old_space_size=4096 pnpm build"

Hope that helps!

It’s always shocking to lose the ability to build your websites. I hope this info lets you publish again!

As always, if you have any questions, feel free to share with me on Mastodon or Twitter.

Stay curious, Ryo

Table of Contents