ÖNEMLİ HATA: Yığın sınırına yakın etkisiz işaret sıkıştırmaları Tahsis başarısız - JavaScript, ionic 3'te bellek yetersiz kalıyor


Yanıtlar:


136

Google'dan bu soruya inenler için açısal olmayan genel bir cevap için:

Bu hatayla her karşılaştığınızda, bunun nedeni muhtemelen bir bellek sızıntısı veya Düğüm <= 10 ve Düğüm> 10'un belleği yönetme şekli arasındaki farktır. Genellikle sadece Düğüme ayrılan belleği artırmak, programınızın çalışmasına izin verir ancak gerçek sorunu çözmeyebilir ve düğüm işlemi tarafından kullanılan bellek yine de ayırdığınız yeni belleği aşabilir. Çalışmaya başladığında veya düğüm> 10'a güncellenmeye başladığında, düğüm işleminizde bellek kullanımını profillemeyi öneririm.

Hafıza sızıntısı yaşadım. Düğümdeki bellek sızıntılarında hata ayıklama hakkında harika bir makale .

Bununla birlikte, Düğüm sürecinizi çalıştırdığınız terminalde belleği artırmak için:

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

değerleri nerede max-old-space-sizeolabilir: [2048, 4096, 8192, 16384]vb

[GÜNCELLEME] Daha fazla netlik için daha fazla örnek:

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
Teşekkürler, unutulmamalıdır ki 8192, 8 Gb anlamına gelir.
jaggedsoft

11
Bilginize, varsayılan 512 MB'dir. Bu miktarın 10 katına doğrudan atlamanıza gerek yok, önce 512 ile 5120 arasında bir şey deneyebilirsiniz.
Cameron Hudson

Teşekkürler, bu bellek sorunları olan her tür uygulama için işe yarar.
invinciblemuffi

4
Sadece şunu belirtmek istiyorum - bu her zaman bir bellek sızıntısının göstergesi değildir. Belki de kullandığınız bir kitaplık, eskisinden biraz daha fazla bellek kullanıyor. Bizim için next.jshızlı yenileme özelliği ile bizim app çökmesini başladı.
Daniel Cooke

62

Benim durumumda, NodeJs 12.10.0 sürümünü yükleyerek bu sorunu düzeltin


1
Burada aynı. Versiyonu ve çalışmalarını yeni değiştirdim.
brunocascio

9
Bağlam için, Düğüm 12, varsayılanları kullanmak yerine kullanılabilir belleğe dayanan farklı bir yığın yönetim stratejisine sahiptir. Burada daha fazla bilgi: foundation.nodejs.org/announcements/2019/04/24/...
derek Dowling

Benim için başka hiçbir şey işe yaramadı, oydu. Çok teşekkür ederim :)
Hussain Alaidarous

Düğüm 12'ye güncelledik ve hata ortadan
kalktı

1
@DerekDowling Wayback, bağlantının kopmasına neden oluyor: web.archive.org/web/20191103115941/https://…
Grim

61

centos sunucusu 7'de aynı sorun, ancak bu sorunumu çözdü:

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

X = (2048 or 4096 or 8192 o..)Hafızanın değeri nerede


2
x .. hatasının değerini değiştirdikten sonra aynı kalır
Sohail Ahmad

Hata devam ederse, işlem için yeterli bellek olana kadar boyutu artırmaya devam edin, bu da sonunda hatayı önleyecektir. Ben bu hata alınamadı bulundu sadece zaman oldu ng serveve bir büyük js başvurulan dosyası scriptsbölümünde angular.jsonbelleğe yüklenecek gerektiğini.
atconway

X'in değerini 8192'den büyük ayarlayabilir miyim? 32GB
Diego

benim için komut satırında max-old-space-size sağlamak işe yaramadı. Bu, nvm tabanlı düğüm ile etkileşim OLABİLİR? bunun yerine bir bash betiğinin içinde, 'node --max-old'un aksine, işe yarayan' NODE_OPTIONS = "- max-old-space-size = 2048" düğüm $ NG build --prod --progress = false 'kullandım -space-size = 2048 $ NG build --prod --progress = false 'ki bu olmadı. Hâlâ nedenini bilmiyorum.
Simon H


20

ng buildVisual Studio kodunda komutu çalıştırdığımda aynı hatayı aldım . Ancak aynı şeyi Windows komut satırında aşağıdaki sırayla çalıştırdığımda başarılı bir şekilde inşa edebilirim.

Aşama 1.

set NODE_OPTIONS=--max_old_space_size=4096

Adım 2.

ng build

10

Visual Studio kodunda aşağıdaki ifadeleri çalıştırdığımda aynı hata mesajını aldım. Ama aynı şeyi Windows komut satırında çalıştırdığımda başarılı bir şekilde inşa edebilirim.

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
Bu kod soruyu yanıtlayabilirken, bu kodun soruyu neden ve / veya nasıl yanıtladığına ilişkin ek bağlam sağlamak, uzun vadeli değerini artırır.
Eric Leschinski

7

Bazı nedenlerden dolayı yukarıdaki yanıtların tümü benim için gerçekten işe yaramadı, sorunumu çözmek için aşağıdakileri yaptım:

  1. Önce node_modulesklasörü silmem gerekiyordu
  2. node.js'yi bilgisayarıma yeniden yükleyin ve
  3. sonra npm install

2. adım zorunlu değildir. Üst çözümü denedim ve adım 2 olmadan benim için de çalıştı
Analist

5

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

parametre eklemek --build-optimizer benim durumumdaki sorunu çözdü.

Güncelleme:

Neden sadece --build-optimizer eklemenin sorunu çözdüğünden emin değilim, ancak açısal belgelere göre aot etkin olarak kullanılmalıdır, bu nedenle güncellenmiş komut aşağıdaki gibi olmalıdır

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

Açısal derleme belgeleri


4

Bu komutu proje klasörünüzde çalıştırın. Kullanım hizmet yerine inşa

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

4

Satırı değiştir

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

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

NOT:

  1. port - 4300 sabit değildir hangi portu seçtiğinize bağlıdır.

  2. --max_old_space_size = 5096 çok sabit değil; herhangi bir değer 1024,2048,4096 vb.


4

Benim durumumda, tepkimenin tüm belleği kullanmasına neden olan bir özyinelemeydi .

Bu, kodumu yeniden düzenlerken ve bunu fark etmediğimde oldu.

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

Diğer düğüm uygulamalarında bu şöyle görünebilir:

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

Bu neden bir problemdi? <> </>, <React.Fragment> kullanmak yerine React'te geçerli olmalıdır, değil mi?
Joelgullander

@Codehiker Evet, React 16'da yeni bir sözdizimi
GoalsAndGambles

1
Özyineleme, SumComponenta SumComponent(a içeren a SumComponentiçerir SumComponent) içerir
taş

3

Benim için firebase paketiyle ilgili bir sorundu.

Package.json'unuz için yalnızca "@ firebase / database": "0.2.1" ekleyin, node_modules'i yeniden yükleyin ve çalışır.


2

Mevcut düğüm modülünü sildim ve sorunumu çözmek için aşağıdaki komutları çalıştırdım

npm install -all
npm audit fix

2

Başka bir açısal olmayan cevap (AWS Amplify'de bir react uygulaması oluştururken aynı sorunla karşılaşıyordum).

Emmanuel'in bahsettiği gibi, belleğin düğüm v10 ile düğüm v12 tarafından işlenme biçimindeki farktan geliyor gibi görünüyor.

Hafızayı boşuna artırmaya çalıştım. Ancak v12 düğümünü kullanarak bunu yaptı.

nvm use $VERSION_NODE_12Oluşturma ayarlarınıza nasıl ekleme yapabileceğinizi @atlesp burada https://github.com/aws-amplify/amplify-console/issues/440#issuecomment-602626451 görüntü


1

Benim için sorun, node_modulesyeniden adlandırdığım fazladan bir klasöre sahip olmak node_modules_oldve npm installyeni bir node_modules. Her nasılsa, yapı hala node_modules_oldklasörü alıyor olmalı , bu yüzden node_modules_oldsorunu çözmek için dizinden çıktım .


1

Lütfen düğüm sürümünüzü kontrol edin:

   $  node -v

10.1.1 bir şeyse, aşağıdaki komutlarla kök düzey düğüm sürümünüzü güncellemeniz gerekir.

$ 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

Bittiğinde lütfen terminalinizi veya görsel stüdyonuzu yeniden başlatın.

İş 100 $

İonic kullanıcısı için lütfen aşağıdaki kodu paketinize ekleyin.json iyonik kullanıcı için

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


Aslında bu app-scripts, web üzerinden inşa ediyorsanız işe yarar , ancak ionic cordova build androidnasıl android veya komut dosyası oluşturursanız ?
Muhammed Moussa

0

Klasör adınızı kontrol edin. Klasör adınızda boşluklar varsa, bu tür sorunlar ortaya çıkar. Boşluk olmadan yeniden adlandırın. umarım işe yarar.


0

React uygulamasını VSCode üzerinde çalıştırırken bu oluyorsa, lütfen propTypes'ınızı kontrol edin, tanımlanmamış Proptypes aynı soruna yol açar.


0

Benim için bu hatayı aldım çünkü angular.json dosyamdaki dist klasörünün çıktı yoluna erişimi kaybettim. Güncellenen kimlik bilgileriyle uzak yola yeniden bağlandıktan sonra hata ortadan kalktı.


0

#! / usr / bin / env düğümü --max-old-space-size = ionic-app-scripts.js dint çalışmasında 4096

Değiştiriliyor

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

Toplayarak:

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

Nişanlı olarak çalıştı


0

Benim için, buildReact projemdeki her şeyi kaldırdıktan sonra eslint ve daha güzel düzeltme ve bir dizin ile biçimlendirme çalıştırdığımda bu sorunla karşılaştım . Sanırım bunun nedeni çok fazla dosya olması.


0

Sanırım bu hataya ulaşmanın birçok yolu var!

Benim tarafımda, bende bir döngü vardı package.json. A Projesi, A projesine bağımlı olan B projesine bağımlıydı.


0

Bazen başarının anahtarı basitliktir. Kodunuzu while (i <= 10000) {}artırmadan arayın i;)


0

Projem için nodejs, typecript, iplik, npm, vb. Gibi tüm kütüphanelerimi güncelledikten sonra bu sorun ortadan kalktı.


0

Bunu terminale yazmanız yeterlidir:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.