Како да поправите грешку „ЈаваСцрипт хрпа без меморије“

ЈаваСцрипт остаје један од најчешће коришћених програмских језика због своје свестраности. Да би покренули ЈаваСцрипт ван окружења претраживача, програмери морају да инсталирају Ноде.јс, окружење за извршавање на више платформи.

Грешка у ЈаваСцрипт-у без меморије је уобичајена када се покреће ЈаваСцрипт Ноде.јс пројекат.

Проблем са гомилањем меморије у ЈаваСцрипт-у је грешка која се јавља када је подразумевана меморија додељена рачунарском систему недовољна за покретање великог пројекта.

Ако наиђете на грешку са несташицом меморије, ваш програм ће се срушити и приказати овај излаз;

ФАТАЛНА ГРЕШКА: ЦАЛЛ_АНД_РЕТРИ_ЛАСТ Алокација није успела – ЈаваСцрипт хрпа без меморије

Ор

Фатална грешка: неважећа алокација величине табеле није успела – јавасцрипт хрпа без меморије

Узроци грешке ЈаваСцрипт-а без меморије

  • Присуство великих структура података: Рад са великим структурама података као што су матрице или низови може заузети много простора, што на крају узрокује грешку у гомилању меморије.

Ово је пример велике структуре података са милијарду елемената;

let array = [];

for (let i = 0; i < 1000000000; i++) {

  array.push(i);

}
  • Лоше управљање меморијом: Како ваша апликација расте, морате пустити неке од објеката који вам више нису потребни.

Ово је пример функције која доводи до цурења меморије;

let array = [];

setInterval(function() {

  array.push(new Array(1000000).join("x"));

}, 1000);
  • Бесконачне петље: Такав код ради заувек јер се услов завршетка никада не постиже.

Ово је пример бесконачне петље која ће се извршавати заувек;

while (true) {

    console.log(1);

}

Бесконачне петље могу довести до ове грешке јер прилично брзо користи меморију.

  • Рекурзивне функције: Рекурзивна функција је функција која позива себе индиректно или директно да понови одређени скуп инструкција док се не испуни одређени услов(и). Ако су ове функције добро осмишљене, вероватно ће довести до меморијског водства и, на крају, гомиле меморијских грешака.
  • Присуство многих објеката у комаду кода: Ако ваш код има много великих објеката, меморија коју користе ти објекти заједно може довести до преоптерећења.
  19 најбољих ЦПУ хладњака за одржавање вашег процесора хладним за врхунске перформансе

Исправите грешку у ЈС хрпи без меморије

Ова грешка се може јавити у оперативним системима заснованим на Виндовс, мацОС и Линук-у као што је Убунту. На срећу, грешка се може поправити, без обзира на ваш оперативни систем.

#1. Исправљање грешке ЈаваСцрипт гомиле меморије на Виндовс ОС-у

Корак 1: Кликните на Старт мени и пронађите Напредне системске поставке.

Корак 2: Кликните на Променљиве окружења у доњем левом делу оквира за дијалог.

Корак 3: Кликните Ново на Корисничке променљиве или Системске променљиве. Прва опција примењује промене на тренутни кориснички налог. Међутим, друга опција примењује промене на цео систем.

Корак 4: Биће приказане две опције; у име променљиве унесите НОДЕ_ОПТИОНС и на вредност променљиве унесите –мак-олд-спаце-сизе=4096. У овом кораку, број 4096 ће доделити 4 ГБ виртуелне меморије за Ноде.јс. Можете да доделите више, као што је 8 ГБ, тако што ћете поставити вредност као –мак-олд-спаце-сизе=8192.

Корак 5: Кликните на у реду, примените и на крају, у реду да бисте сачували промене.

Такође можете да користите Виндовс ПоверСхелл терминал да решите грешку. Отворите терминал на свом Виндовс ОС-у и унесите следећу команду;

env:NODE_OPTIONS="--max-old-space-size=4096"

Такође можете привремено да решите грешку тако што ћете покренути ову команду пре покретања апликације;

set NODE_OPTIONS=--max-old-space-size=4096

#2. Исправљање грешке ЈаваСцрипт-а без меморије на Линук-у

  • Корак 1: Идентификујте извор грешке. Проверите евиденцију конзоле или излаз да бисте утврдили линије кода/датотеке које узрокују грешку.
  • Корак 2: Извезите променљиву окружења која наводи виртуелну меморију коју сте доделили за Ноде.јс. Користите ову команду;
export NODE_OPTIONS=--max-old-space-size=4096

Ови кораци ће доделити 4 ГБ виртуелне меморије за Ноде.јс. Ако грешка и даље постоји, можете повећати величину меморије удвостручавањем.

На пример, ако желите да доделите 8ГБ као виртуелну меморију, можете покренути ову команду;

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

#3. Исправљање грешке ЈаваСцрипт-а без меморије на мацОС-у

Можете да решите грешку ЈаваСцрипт гомиле меморије у мацОС-у користећи сличан приступ као у Линук-у. Пратите ове кораке;

  • Корак 1: Идентификујте извор грешке тако што ћете проверити евиденцију конзоле или излаз да бисте утврдили линије кода/датотеке које узрокују грешку.
  • Корак 2: Извезите променљиву окружења која наводи виртуелну меморију коју сте доделили Ноде.јс. Користите ову команду;
export NODE_OPTIONS=--max-old-space-size=4096

Ови кораци ће доделити 4 ГБ виртуелне меморије за Ноде.јс. Ако грешка и даље постоји, можете повећати величину меморије удвостручавањем.

  Који је најбољи ВПН у САД?

На пример, ако желите да доделите 8ГБ као виртуелну меморију, можете покренути ову команду;

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

Повећање меморије током инсталације НПМ-а

Решења која смо до сада понудили одговарају грешкама које се јављају када покренете Ноде.јс апликацију. Међутим, можете да доделите виртуелну меморију да бисте решили грешку са недостатком меморије док инсталирате ЈаваСцрипт пакете. Користите ову команду;

node --max-old-space-size=4096 (which npm) install

Напомена: Можете наставити да повећавате доделу виртуелне меморије за 1ГБ, 2ГБ, 3ГБ или 4ГБ. Морате навести величину меморије у МБ. Међутим, немојте додељивати целу меморију машине за Ноде.јс јер то може довести до квара вашег програма. Као добра пракса, ако ваша машина има 16 ГБ, можете да доделите до 8 ГБ за Ноде.јс.

Спречите ЈаваСцрипт грешку у гомиле меморије

До сада смо разговарали о томе како да поправимо грешку која се јавља у ЈаваСцрипт-у када се појави. Срећом, такође можете имати мере да спречите појаву ове грешке док покрећете ЈаваСцрипт код. Ово су неки од најбољих приступа:

#1. Поделите податке на мале делове

Можда имате програм Ноде.јс који увози велике скупове података из великих ЦСВ датотека кроз ЕТЛ: Ектрацт – Трансформ – Лоад процес. Можда ћете открити да ваша апликација увек пада када покушате да увезете податке. Ако радите са МонгоДБ-ом, грешку можете решити тако што ћете имати инструкцију командне линије као што је;

split -l 1000000 users.csv

Ова команда налаже Ноде.јс да подели датотеку са именом корисници у више датотека са по 1000000 корисника. Ознака -л означава да датотека треба да се подели на основу броја линија кода.

#2. Пратите употребу меморије

Можете да користите меморијски профилатор да бисте открили цурење меморије у вашем коду. Можете комбиновати уграђену меморију Ноде.јс и ЦхромеДевТоолс да бисте то постигли. Њих двоје могу открити проблеме у вашем коду и поправити их.

Такође можете да користите екстерне алате као што су Датадог, Нев Релиц и АппДинамицс да бисте надгледали перформансе ваше апликације и предузели неопходне радње. Такође можете да проверите коришћење меморије у вашој апликацији Ноде.јс помоћу методе процесс.мемориУсаге().

  Како користити ФТП команду на Линуку

#3. Избегавање цурења меморије

До цурења меморије долази када ваша апликација Ноде.јс задржи референце на објекте који јој више нису потребни. Ако се такви објекти не сакупљају као смеће, временом ће доћи до повећања употребе меморије.

Постоји неколико приступа да се избегне цурење меморије, као што је избегавање глобалних променљивих у вашем коду, избегавање блокирања И/О операција и коришћење кључних речи лет и цонст приликом декларисања променљивих уместо вар.

#4. Процеси мријеста

Ако користите Ноде.јс на машини са ограниченом меморијом, као што је Распберри Пи, вероватно ћете наићи на гомилу грешака у меморији. Можете имати један главни процес, а други су груписани као радници. Чим главни процес открије да систему понестаје меморије, он ће прекинути тај процес и доделити задатак другом који није преоптерећен.

#5. Ажурирајте хардвер

Ако повећање алокације меморије и преношење наведених процеса за спречавање грешке гомиле меморије не реши ваше проблеме, онда можете размислити о ажурирању хардвера. Ноде.јс може да ради на РАМ-у до 512 МБ. Међутим, ваша апликација ће захтевати више РАМ-а како расте.

С друге стране, повећање броја ЦПУ-а такође може побољшати алокацију меморије. У идеалном случају, 2 или више ЦПУ-а ће омогућити вашој апликацији да користи радне нити за ЦПУ-интензивне задатке као што су криптографија и обрада слика.

ФАКс

Шта узрокује грешку у ЈаваСцрипт-у без меморије?

Ова грешка може бити узрокована неколико разлога;
1. Цурење меморије
2. Бесконачне петље
3. Присуство многих објеката у пројекту
4. Присуство великих структура података

Да ли је грешка ЈаваСцрипт без меморије решива?

Да. Можете решити грешку кроз;
1. Додељивање више виртуелне меморије за Ноде.јс
2. Отклањање цурења меморије
3. Оптимизација вашег кода
4. Надоградња вашег хардвера

Како можете да решите грешку са недостатком меморије у апликацији Реацт?

Реацт је једна од најпопуларнијих ЈаваСцрипт библиотека. Пронађите датотеку пацкаге.јсон у основном директоријуму и ове линије до одељка са скриптама;

"scripts": {

    "start": "react-scripts --max_old_space_size=4096 start",

    "build": "react-scripts --max_old_space_size=4096 build",

    "test": "react-scripts test",

    "eject": "react-scripts eject"

}

Окончање

Већина програмера је навикла на грешке и грешке у коду, а не на грешке током извршавања, док покрећу своје Ноде.јс програме. Срећом, не морате да бринете, јер је грешка у гомиле меморије поправљива. Дефинисали смо шта је грешка у ЈаваСцрипт-у без меморије, објаснили како да је решите и како да је избегнете у вашем следећем Ноде.јс пројекту.

Затим можете прочитати како да избегнете неке уобичајене грешке у ЈаваСцрипт-у.