致命的なエラー:無効なマーク-ヒープ制限に近いコンパクトな割り当てに失敗しました-JavaScriptヒープがionic3のメモリから不足しています


回答:


156

グーグルからこの質問にたどり着く人々のための非角度の一般的な答えのために:

このエラーに直面するたびに、おそらくメモリリーク、またはノード<= 10とノード> 10のメモリ管理方法の違いが原因です。通常、ノードに割り当てられたメモリを増やすだけでプログラムを実行できますが、実際には実際の問題解決できない場合があり、ノードプロセスで使用されるメモリが割り当てた新しいメモリを超える可能性があります。ノードプロセスが実行を開始するとき、またはノード> 10に更新するときに、ノードプロセスのメモリ使用量をプロファイリングすることをお勧めします。

メモリリークが発生しました。これは、ノードのメモリリークのデバッグに関する優れた記事です。

そうは言っても、メモリを増やすには、ノードプロセスを実行するターミナルで次のようにします。

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
参考までに、デフォルトは512MBです。その量の10倍に直接ジャンプする必要はありません。最初に、512から5120の間で何かを試すことができます。
キャメロンハドソン

おかげで、これはメモリの問題があるすべてのタイプのアプリケーションで機能します。
invinciblemuffi

5
ただ指摘したいのですが、それは必ずしもメモリリークを示しているわけではありません。おそらく、使用しているライブラリは、以前よりも少し多くのメモリを使用しています。私たちにとってnext.js、高速更新機能でアプリをクラッシュさせ始めました。
ダニエルクック

@DanielCooke次のjsに使用した値は何ですか?この問題に使用したソリューションを次のjsと共有してください
MSD

@MSD 4096 max-old-space-sizeで、次の> 9.6でうまくいくようです。本番ビルドおよび開発用
DanielCooke20年

64

私の場合、NodeJsバージョン12.10.0をインストールしてこの問題を修正します


1
こっちも一緒。バージョンとその動作を変更しました。
brunocascio

9
コンテキストとして、ノード12には、デフォルトを使用する代わりに使用可能なメモリに基づく異なるヒープ管理戦略があります。ここでは詳細:foundation.nodejs.org/announcements/2019/04/24/...
デレク・ダウリング

他に何もうまくいきませんでした、これがそれでした。どうもありがとうございました:)
HussainAlaidarous20年

私たちは、ノード12に更新され、エラーが簡単に10ノード上のヒープを管理するよりも、去っていきました
Raffaeu

1
:壊れたウェイバックの原因のリンク@DerekDowling web.archive.org/web/20191103115941/https://...
グリム

62

CentOSサーバー7でも同じ問題が発生しましたが、これで問題は解決しました。

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

X = (2048 or 4096 or 8192 o..)メモリの価値はどこにありますか


2
x ..の値を変更した後、エラーは同じままです
SohailAhmad19年

エラーが続く場合は、処理するのに十分なメモリができるまでサイズを増やし続けて、最終的にエラーを防ぎます。このエラーを乗り越えることができなかったのは、そのセクションで参照されてng serveいる巨大な.jsファイルをメモリにロードする必要scriptsangular.jsonあるときだけでした。
atconway

Xの値を8192より大きく設定できますか?私は32GBのRAMを持っています
ディエゴ

私の場合、コマンドラインでmax-old-space-sizeを指定しても機能しませんでした。これは、nvmベースのノードとの相互作用である可能性がありますか?代わりに、bashスクリプト内で、「node --max-old」ではなく、「NODE_OPTIONS = "-max-old-space-size = 2048" node $ NG build --prod --progress = false」を使用しました。 -space-size = 2048 $ NG build --prod --progress = false 'これはしませんでした。理由はまだわかりません。
サイモン

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が必要になる場合があります。


21

ng buildVisual 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

20
このコードは質問に答えることができますが、このコードが質問に答える理由や方法に関する追加のコンテキストを提供すると、長期的な価値が向上します。
EricLeschinski19年

7

いくつかの理由で、上記のすべての答えが実際にはうまくいきませんでした。問題を解決するために次のことを行いました。

  1. 最初にnode_modulesフォルダを削除する必要がありました
  2. PCにnode.jsを再インストールして
  3. その後 npm install

手順2は必須ではありません。私は上位のソリューションを試しましたが、ステップ2がなくてもうまくいきました
アナリスト

うまく手順2を必要としないかもしれない、私は私のために働い何:)共有
sambayour

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. ポート-4300は、選択したポートによって異なります。

  2. --max_old_space_size = 5096定数ではありません。任意の値1024、2048、4096など


5

私の場合、reactがすべてのメモリを使い果たす原因となったのは再帰でした。

これは、コードをリファクタリングしていて、これに気づかなかったときに発生しました。

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

他のノードアプリでは、これは次のようになります。

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

1
なぜこれが問題だったのですか?<> </>は<React.Fragment>を使用する代わりに、Reactで有効である必要がありますか?
Joelgullander

@Codehikerうん16を反応させるのでは、新しい構文
GoalsAndGambles

4
再帰はSumComponentSumComponent(...SumComponentを含むを含むSumComponent)を含むものです

5

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

--build-optimizer 私の場合、パラメータを追加することで問題が解決しました。

更新:

--build-optimizerのみを追加することで問題が解決する理由はわかりませんが、Angularドキュメントに従って、aotを有効にして使用する必要があるため、更新されたコマンドは次のようになります

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

Angularビルドドキュメント


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

plsはあなたのノードバージョンをチェックします:

   $  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

完了したら、plsはターミナルまたはビジュアルスタジオを再起動します。

それは100ドルの仕事です

イオンユーザーplsの場合、package.jsonに以下のコードを追加します イオンユーザー向け

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


実際、これはWebをapp-scripts構築する場合に機能しますが、Androidまたはスクリプトをionic cordova build androidどのように構築する場合はどうでしょうか。
MuhammedMoussa20年

2

別の非角度の答え(AWS Amplifyでreactアプリを構築するときに同じ問題に直面していました)。

エマニュエルが述べたように、それはノードv10とノードv12によるメモリの処理方法の違いに起因しているようです。

私は無駄にメモリを増やそうとしました。しかし、ノードv12を使用することでそれが実現しました。

nvm use $VERSION_NODE_12ここで@atlespによって説明されているように、ビルド設定に追加する方法を確認してくださいhttps://github.com/aws-amplify/amplify-console/issues/440#issuecomment-602626451 画像


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

VSCodeでReactアプリケーションを実行しているときにこれが発生した場合は、propTypesを確認してください。未定義のProptypesでも同じ問題が発生します。


0

私の場合、angular.jsonファイルに設定されているdistフォルダーの出力パスにアクセスできなくなったため、このエラーが発生しました。更新された資格情報を使用してリモートパスに再接続した後、エラーはなくなりました。


0

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

変更

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

fianlly働いた


0

私にとっては、eslintとprettierの修正を実行buildし、Reactプロジェクトのディレクトリでフォーマットしたときに、すべてが機能した後、この問題に遭遇しました。ファイルが多すぎるからだと思います。


0

このエラーに到達する方法はたくさんあると思います!

私の側では、ループがありましたpackage.json。プロジェクトAはプロジェクトBに依存しており、プロジェクトBはプロジェクトAに依存していました。


0

シンプルさが成功の鍵となることもあります。コードwhile (i <= 10000) {}を増やさずに検索iします;)


0

プロジェクトのnodejs、typescript、yarn、npmなどのすべてのライブラリを更新した後、この問題は解消されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.