Як виправити помилку «Ваша пам’яті JavaScript»

JavaScript залишається однією з найбільш використовуваних мов програмування завдяки своїй універсальності. Щоб запускати JavaScript поза середовищем браузера, розробники повинні встановити Node.js, кросплатформне середовище виконання.

Під час запуску проекту JavaScript Node.js часто зустрічається помилка «В купі JavaScript не вистачає пам’яті».

Проблема нестачі пам’яті JavaScript — це помилка, яка виникає, коли пам’яті за замовчуванням, виділеної комп’ютерною системою, недостатньо для виконання великого проекту.

Якщо ви зіткнетеся з помилкою heap of memory, ваша програма аварійно завершить роботу та відобразить цей результат;

ФАТАЛЬНА ПОМИЛКА: не вдалося розподілити CALL_AND_RETRY_LAST – пам’ять у купі JavaScript

Або

Фатальна помилка: недійсний розподіл розміру таблиці не вдалося – пам’ять у купі JavaScript вичерпана

Причини помилки JavaScript heap of memory

  • Наявність великих структур даних: робота з великими структурами даних, такими як матриці або масиви, може займати багато місця, що зрештою спричиняє помилку «кучі нестачі пам’яті».

Це приклад великої структури даних з мільярдом елементів;

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);

}

Нескінченні цикли можуть призвести до цієї помилки, оскільки вона використовує пам’ять досить швидко.

  • Рекурсивні функції: рекурсивна функція – це функція, яка викликає сама себе опосередковано або безпосередньо для повторення певного набору інструкцій, доки не буде виконано певну умову. Якщо ці функції добре розроблені, вони, швидше за все, призведуть до помилок пам’яті та, зрештою, до купи помилок пам’яті.
  • Наявність багатьох об’єктів у фрагменті коду: якщо ваш код містить багато великих об’єктів, пам’ять, яку разом використовують ці об’єкти, може призвести до перевантаження.

Виправте помилку JS heap of memory of memory

Ця помилка може виникати в операційних системах Windows, macOS і Linux, наприклад Ubuntu. На щастя, помилку можна виправити, незалежно від вашої операційної системи.

  Захистіть свій інтернет-магазин після Magento 1 EOL

#1. Виправлення помилки нестачі пам’яті JavaScript у купі в ОС Windows

Крок 1. Натисніть меню «Пуск» і знайдіть «Додаткові параметри системи».

Крок 2: Клацніть Змінні середовища в нижній лівій частині діалогового вікна.

Крок 3. Клацніть «Новий» у змінних користувача або системних змінних. Перший варіант застосовує зміни до поточного облікового запису користувача. Однак другий варіант застосовує зміни до всієї системи.

Крок 4: буде показано два варіанти; у полі назви змінної введіть NODE_OPTIONS, а в полі значення змінної введіть –max-old-space-size=4096. На цьому кроці цифра 4096 виділить 4 ГБ віртуальної пам’яті для Node.js. Ви можете виділити більше, наприклад 8 ГБ, встановивши значення як –max-old-space-size=8192.

Крок 5: Натисніть «ОК», «Застосувати» і, нарешті, «ОК», щоб зберегти зміни.

Ви також можете скористатися терміналом Windows PowerShell, щоб вирішити цю помилку. Відкрийте термінал у вашій ОС Windows і введіть таку команду;

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

Ви також можете тимчасово вирішити цю помилку, виконавши цю команду перед запуском програми;

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

#2. Виправлення помилки «купа пам’яті» JavaScript у Linux

  • Крок 1: Визначте джерело помилки. Перевірте журнали консолі або вихідні дані, щоб визначити рядки коду/файлу, які викликають помилку.
  • Крок 2. Експортуйте змінну середовища, що вказує віртуальну пам’ять, яку ви виділили для Node.js. Використовуйте цю команду;
export NODE_OPTIONS=--max-old-space-size=4096

Ці дії дозволять виділити 4 ГБ віртуальної пам’яті для Node.js. Якщо помилка не зникає, ви можете збільшити розмір пам’яті подвоївши.

Наприклад, якщо ви хочете виділити 8 ГБ як віртуальну пам’ять, ви можете виконати цю команду;

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

#3. Виправлення помилки «купа пам’яті» JavaScript у macOS

Ви можете вирішити помилку «куча пам’яті» JavaScript у macOS, використовуючи подібний підхід, як і в Linux. Виконайте такі дії;

  • Крок 1. Визначте джерело помилки, перевіривши журнали консолі або вихідні дані, щоб визначити рядки коду/файлу, які викликають помилку.
  • Крок 2. Експортуйте змінну середовища, що визначає віртуальну пам’ять, яку ви виділили для Node.js. Використовуйте цю команду;
export NODE_OPTIONS=--max-old-space-size=4096

Ці дії дозволять виділити 4 ГБ віртуальної пам’яті для Node.js. Якщо помилка не зникає, ви можете збільшити розмір пам’яті подвоївши.

Наприклад, якщо ви хочете виділити 8 ГБ як віртуальну пам’ять, ви можете виконати цю команду;

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

Збільшення пам’яті під час встановлення NPM

Рішення, які ми пропонували досі, відповідають помилкам, які виникають під час запуску програми Node.js. Однак ви можете виділити віртуальну пам’ять, щоб вирішити помилку нестачі пам’яті під час встановлення пакетів JavaScript. Використовуйте цю команду;

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

Примітка. Ви можете продовжувати збільшувати розподіл віртуальної пам’яті на 1 ГБ, 2 ГБ, 3 ГБ або 4 ГБ. Ви повинні вказати розмір пам’яті в Мб. Однак не виділяйте всю пам’ять машини для Node.js, оскільки це може призвести до збою програми. Як гарна практика, якщо ваша машина має 16 ГБ, ви можете виділити до 8 ГБ для Node.js.

  Як поділитися своїм календарем Outlook

Запобігайте помилці JavaScript, пов’язаній із нестачею пам’яті

Досі ми обговорювали, як виправити помилку нестачі пам’яті купи JavaScript, коли вона виникає. На щастя, ви також можете вжити заходів, щоб запобігти виникненню цієї помилки під час запуску коду JavaScript. Ось деякі з найкращих підходів:

#1. Розділіть дані на невеликі фрагменти

Можливо, у вас є програма Node.js, яка імпортує великі набори даних із великих файлів CSV через процес ETL: Extract – Transform – Load. Ви можете виявити, що ваша програма завжди аварійно завершує роботу, коли ви намагаєтеся імпортувати дані. Якщо ви працюєте з MongoDB, ви можете вирішити цю помилку за допомогою інструкції командного рядка, наприклад;

split -l 1000000 users.csv

Ця команда наказує Node.js розділити файл під назвою «користувачі» на кілька файлів по 1000 000 користувачів у кожному. Прапор -l вказує, що файл має бути розділений на основі кількості рядків коду.

#2. Контроль використання пам’яті

Ви можете використовувати профайлер пам’яті, щоб виявити витоки пам’яті у вашому коді. Ви можете поєднати вбудовану пам’ять Node.js і ChromeDevTools, щоб досягти цього. Вони можуть виявити проблеми у вашому коді та виправити їх.

Ви також можете використовувати зовнішні інструменти, такі як Datadog, New Relic і AppDynamics, щоб контролювати продуктивність вашої програми та виконувати необхідні дії. Ви також можете перевірити використання пам’яті у своїй програмі Node.js за допомогою методу process.memoryUsage().

#3. Уникнення витоку пам’яті

Витоки пам’яті відбуваються, коли ваша програма Node.js зберігає посилання на об’єкти, які їй більше не потрібні. Якщо такі об’єкти не збираються для сміття, з часом накопичуватиметься використання пам’яті.

  Як користуватися Skype на Chromebook

Є кілька підходів, щоб уникнути витоку пам’яті, наприклад, уникати глобальних змінних у вашому коді, уникати блокування операцій вводу-виводу та використовувати ключові слова let і const під час оголошення ваших змінних замість var.

#4. Процеси нересту

Якщо ви використовуєте Node.js на машині з обмеженою пам’яттю, такій як Raspberry Pi, ви, ймовірно, зіткнетеся з купою помилок нестачі пам’яті. Ви можете мати один основний процес, а інші згруповані як робочі. Як тільки головний процес виявляє, що системі бракує пам’яті, він вбиває цей процес і призначає завдання іншому, який не перевантажений.

#5. Оновлення обладнання

Якщо збільшення розподілу пам’яті та виконання перелічених процесів запобігання помилці «кучі пам’яті» не вирішують ваші проблеми, ви можете розглянути можливість оновлення апаратного забезпечення. Node.js може працювати з оперативною пам’яттю всього 512 МБ. Однак ваш додаток потребуватиме більше оперативної пам’яті, оскільки він росте.

З іншого боку, збільшення кількості ЦП також може покращити розподіл пам’яті. В ідеалі 2 або більше ЦП дозволять вашій програмі використовувати робочі потоки для інтенсивних ЦП завдань, таких як криптографія та обробка зображень.

поширені запитання

Що спричиняє помилку Heap of Memory Error?

Ця помилка може бути викликана кількома причинами;
1. Витоки пам’яті
2. Нескінченні цикли
3. Наявність у проекті багатьох об’єктів
4. Наявність великих структур даних

Чи можна вирішити помилку Heap Heap of Memory?

Так. Ви можете вирішити помилку за допомогою;
1. Виділення додаткової віртуальної пам’яті для Node.js
2. Усунення витоків пам’яті
3. Оптимізація коду
4. Оновлення апаратного забезпечення

Як ви можете вирішити помилку Heap of Memory у програмі React?

React — одна з найпопулярніших бібліотек JavaScript. Знайдіть файл package.json у кореневому каталозі та ці рядки до розділу сценаріїв;

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

}

Підведенню

Більшість розробників звикли до помилок і помилок коду, а не до помилок виконання, коли вони запускають свої програми Node.js. На щастя, вам не потрібно турбуватися, оскільки помилку «кучі пам’яті» можна виправити. Ми визначили, що таке помилка нестачі пам’яті JavaScript, пояснили, як її вирішити та як її уникнути у вашому наступному проекті Node.js.

Далі ви також можете прочитати, як уникнути деяких типових помилок JavaScript.