घातक त्रुटि: ढेर सीमा के पास अप्रभावी निशान-कॉम्पैक्ट आवंटन विफल रहा - आयन 3 में स्मृति से बाहर जावास्क्रिप्ट ढेर


जवाबों:


162

Google से इस प्रश्न पर उतरने वालों के लिए एक गैर-कोणीय सामान्य उत्तर के लिए:

हर बार जब आप इस त्रुटि का सामना करते हैं, तो शायद मेमोरी लीक या अंतर के कारण कि कैसे नोड <= 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
FYI करें, डिफ़ॉल्ट 512 MB है। आपको उस राशि पर सीधे 10x कूदने की आवश्यकता नहीं है, आप पहले 512 और 5120 के बीच कुछ कोशिश कर सकते हैं।
कैमरन हडसन

यह स्मृति के मुद्दों वाले सभी प्रकार के एप्लिकेशन के लिए धन्यवाद काम करता है।
invinciblemuffi

5
बस इंगित करना चाहते हैं - यह हमेशा एक स्मृति रिसाव का संकेत नहीं है। शायद आप जिस पुस्तकालय का उपयोग कर रहे हैं, वह उपयोग की तुलना में थोड़ी अधिक स्मृति का उपयोग कर रहा है। हमारे लिए next.jsतेजी से ताज़ा सुविधा के साथ हमारे ऐप्स क्रैश हो शुरू कर दिया।
डैनियल कुक 12

@DanielCooke आप अगले js के लिए किस मूल्य का उपयोग करते हैं? क्या आप इस मुद्दे के लिए अगले js
MSD

@MSD हम अगले> 9.6 के साथ 4096 अधिकतम-पुराने-अंतरिक्ष-आकार के साथ प्राप्त करते हैं। उत्पादन के लिए बनाता है और देव
डैनियल कुक

64

मेरे मामले में, NodeJs, संस्करण 12.10.0 को स्थापित करने में इस समस्या को ठीक करें


1
मुझे भी। मैंने अभी संस्करण और उसके कार्यों को बदला है।
brunocascio

9
संदर्भ के लिए, नोड 12 में एक अलग ढेर प्रबंधन रणनीति है जो चूक का उपयोग करने के बजाय उपलब्ध स्मृति पर आधारित है। यहाँ अधिक जानकारी: नींव
डेरेक डॉवेल

मेरे लिए और कुछ काम नहीं किया, यह बात थी। बहुत बहुत धन्यवाद :)
हुसैन अलैदरस

हमने नोड 12 को अपडेट किया और त्रुटि दूर हो गई, नोड 10 पर ढेर का प्रबंधन करने की तुलना में आसान है
राफ्यू

1
@DerekDowling Wayback कारण लिंक टूटी: web.archive.org/web/20191103115941/https://…
Grim

63

सेंटोस सर्वर 7 पर एक ही मुद्दा, लेकिन इससे मेरी समस्या हल हो गई:

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

X = (2048 or 4096 or 8192 o..)स्मृति का मूल्य कहां है


2
x का मान बदलने के बाद .. त्रुटि समान है
सोहेल अहमद

यदि त्रुटि जारी रहती है, तो आकार को बढ़ाते रहें जब तक कि संसाधित करने के लिए पर्याप्त मेमोरी न हो जो अंततः त्रुटि को रोक देगा। केवल एक बार जब मैंने पाया कि यह त्रुटि अतीत में नहीं मिल सकती है ng serveऔर एक बड़े पैमाने पर .js फ़ाइल को स्मृति में लोड किए जाने की आवश्यकता के scriptsअनुभाग में संदर्भित किया angular.jsonगया है।
22

क्या मैं X का मूल्य 8192 से अधिक निर्धारित कर सकता हूँ? मेरे पास 32GB RAM
डिएगो

मेरे लिए, कमांड लाइन पर अधिकतम-पुराने-अंतरिक्ष-आकार की आपूर्ति ने काम नहीं किया। यह एमवाय एनएम आधारित नोड के साथ एक बातचीत हो सकती है? एक बैश स्क्रिप्ट के बजाय, मैंने 'NODE_OPTIONS = "- अधिकतम-पुराने-अंतरिक्ष-आकार = 2048 का उपयोग किया" नोड $ NG बिल्ड --प्रोड --प्रोग्रेस = गलत' जो काम करता था, 'नोड -मैक्स-ओल्ड के विपरीत -स्पेस-आकार = 2048 $ एनजी बिल्ड --प्रोड --प्रोग्रेस = गलत 'जो नहीं किया। मैं अभी भी नहीं जानता कि क्यों।
साइमन एच।

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 की आवश्यकता हो सकती है।


24

जब मैं ng buildVisual Studio कोड में कमांड निष्पादित करता हूं तो मुझे वही त्रुटि मिली । लेकिन मैं सफलतापूर्वक निर्माण कर सकता हूं जब मैं निम्नलिखित क्रम में विंडोज कमांड लाइन में एक ही चीज को निष्पादित करता हूं।

चरण 1।

set NODE_OPTIONS=--max_old_space_size=4096

चरण 2।

ng build

11

विजुअल स्टूडियो कोड में दिए गए कथनों को निष्पादित करते समय मुझे वही त्रुटि संदेश मिला। लेकिन मैं सफलतापूर्वक निर्माण कर सकता हूं जब मैं विंडोज़ कमांड लाइन में एक ही चीज को निष्पादित करता हूं।

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

21
हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन यह कोड क्यों और / या इस प्रश्न के उत्तर के बारे में अतिरिक्त संदर्भ प्रदान करता है, इसके दीर्घकालिक मूल्य में सुधार करता है।
एरिक लेसिंसकी

7

कुछ कारणों से उपरोक्त सभी उत्तर वास्तव में मेरे लिए काम नहीं करते थे, मैंने अपनी समस्या को ठीक करने के लिए निम्न कार्य किया:

  1. मुझे पहले node_modulesफ़ोल्डर को हटाना पड़ा
  2. नोड को फिर से स्थापित करें। मेरे पीसी पर और
  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

मेरे मामले में यह एक पुनरावृत्ति थी जो सभी मेमोरी का उपयोग करने के लिए प्रतिक्रिया दे रही थी।

यह तब हुआ जब मैं अपने कोड को पुन: सक्रिय कर रहा था और इस पर ध्यान नहीं दिया।

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

अन्य नोड ऐप्स में यह इस तरह दिख सकता है:

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

1
यह समस्या क्यों थी? <> </> का उपयोग करने के बजाय प्रतिक्रिया में मान्य होना चाहिए <React.Fragment> सही?
जोएलगुलैंडर

@Codehiker अपने नए रिएक्ट में हां 16
जंग खाए

4
पुनरावृत्ति यह है कि SumComponentइसमें एक SumComponent(जिसमें एक SumComponentशामिल है SumComponent...)
पत्थर

5

नोड - max_old_space_size = 4096 ./ode_modules/@angular/cli/bin/ng बिल्ड --prod --build-optimizer

पैरामीटर जोड़ने --build-optimizer से मेरे मामले में समस्या हल हो गई।

अपडेट करें:

मुझे यकीन नहीं है कि केवल जोड़-तोड़-ऑप्टिमाइज़र समस्या को हल करता है, लेकिन कोणीय डॉक्स के अनुसार इसे सक्षम एओटी के साथ इस्तेमाल किया जाना चाहिए, इसलिए अद्यतन कमांड नीचे की तरह होना चाहिए

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

कोणीय बिल्ड डॉक्स


4

अपने प्रोजेक्ट फ़ोल्डर में यह कमांड चलाएँ। बिल्ड के बजाय सर्व का उपयोग करें

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

3

मेरे लिए यह फायरबेस पैकेज के साथ एक समस्या थी।

केवल अपने पैकेज के लिए "@ फायरबस / डेटाबेस": "0.2.1" जोड़ें। आगजनी, नोड_मॉड्यूल और कार्यों को पुनर्स्थापित करें।


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",
    


वास्तव में यह काम करता है यदि आपकी बिल्डिंग वेब के माध्यम से होती है app-scripts, लेकिन यदि आप एंड्रॉइड या स्क्रिप्ट का निर्माण करते हैं तो ionic cordova build androidकैसे?
मुहम्मद

2

एक अन्य गैर-कोणीय उत्तर (मैं उसी मुद्दे का सामना कर रहा था जो एडब्ल्यूएस एम्प्लीफाय पर प्रतिक्रिया ऐप का निर्माण कर रहा था)।

जैसा कि इमैनुअल ने उल्लेख किया है कि ऐसा लगता है कि यह नोड वी 10 बनाम नोड वी 12 द्वारा स्मृति को संभालने के तरीके में अंतर से आता है।

मैंने कोई फायदा नहीं होने के साथ मेमोरी बढ़ाने की कोशिश की। लेकिन नोड 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 installnode_modulesnode_modules_oldnode_modules_old


1

इसे टर्मिनल में टाइप करें:

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


1

मेरे लिए, मुझे एक सिंटैक्स त्रुटि थी (जो दिखाई नहीं दी) और इस त्रुटि का कारण बना।


0

अपने फ़ोल्डर का नाम जांचें। यदि आपके फ़ोल्डर का नाम रिक्त स्थान है, तो इस तरह के मुद्दे उत्पन्न होंगे। रिक्त स्थान के बिना नाम बदलें। आशा है कि यह काम करेगा।


0

यदि यह VSCode पर रिएक्ट एप्लिकेशन चलाने पर हो रहा है, तो कृपया अपने प्रोपेइट्स की जांच करें, अपरिभाषित प्रोपेप्स उसी मुद्दे की ओर ले जाते हैं।


0

मेरे लिए मुझे यह त्रुटि मिली क्योंकि मैंने अपने angular.json फ़ाइल में सेट किए गए डिस्ट फ़ोल्डर के लिए आउटपुट पथ तक पहुंच खो दी थी। मैं अद्यतन क्रेडेंशियल्स के साथ दूरस्थ पथ पर फिर से जुड़ने के बाद त्रुटि दूर हो गई।


0

#! / usr / bin / env नोड - आयनिक-ऐप-स्क्रिप्‍ट में 4096 =max-old-space-size = 4096

संशोधित करना

node_modules / .bin / आयनिक एप्लिकेशन के scripts.cmd

जोड़ कर:

@IF EXIST "% ~ dp0 \ node.exe" ("% ~ dp0 \ node.exe" "% ~ dp0 .. @ आयनिक \ एप-स्क्रिप्ट्स \ बिन \ आयनिक-ऐप-स्क्रिप्ट्स। Js"% *) ELSE @SETLOCAL @SET PATHEXT =% PATHEXT:; JS? =?%;

जमकर काम किया


0

मेरे लिए, मैंने इस समस्या का सामना तब किया, जब एस्लिंट और प्रीटियर फिक्स को चलाने और buildमेरे रिएक्ट प्रोजेक्ट में एक डायरेक्टरी के साथ फॉर्मेट करने के बाद, सभी चीजों को हटाने के बाद काम किया। मुझे लगता है कि यह इसलिए है क्योंकि बहुत सारी फाइलें हैं।


0

मुझे लगता है कि इस त्रुटि तक पहुंचने के बहुत सारे तरीके हैं!

मेरी तरफ, मेरे पास एक लूप था package.json। प्रोजेक्ट ए में प्रोजेक्ट बी पर निर्भरता थी, प्रोजेक्ट ए पर निर्भरता थी।


0

कभी-कभी सरलता ही सफलता की कुंजी है। अपने कोड में while (i <= 10000) {}वृद्धि के बिना खोजें i;)


0

मेरे प्रोजेक्ट के लिए नोडज, टाइपस्क्रिप्ट, यार्न, एनपीएम इत्यादि जैसे मेरे सभी पुस्तकालयों को अपडेट करने के बाद यह मुद्दा चला गया था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.