Node.js LinuxWindowsmacOS

Node.js: JavaScript heap out of memory

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Увеличьте --max-old-space-size и найдите утечку.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Увеличение лимита
  5. Сборка проекта
  6. Поиск утечек
  7. Где скачать и что открыть

#Что означает ошибка

Сообщение
heap out of memory

Сообщение FATAL ERROR: Reached heap limit Allocation failed — JavaScript heap out of memory означает, что процесс Node.js исчерпал лимит памяти, отведённый движку V8 под кучу. По умолчанию лимит зависит от версии Node и доступной памяти (в 64-разрядных системах — примерно 2–4 ГБ), и тяжёлые сборки или обработка больших данных его превышают.

Увеличение лимита — быстрое решение, но если приложение действительно «течёт», оно упадёт позже. Поэтому сначала определите, что нужно приложению: больше памяти (сборка большого фронтенда) или исправление утечки (серверный процесс, растущий со временем).

Увеличьте --max-old-space-size и найдите утечку.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Мало памятиЛимит.Проявляется как «heap out of memory» или близкий по смыслу сбой.Увеличьте.
УтечкаКод.Проявляется как «heap out of memory» или близкий по смыслу сбой.Найдите.
Большие данныеПамять.Проявляется как «heap out of memory» или близкий по смыслу сбой.Потоки.
СборкаWebpack.Проявляется как «heap out of memory» или близкий по смыслу сбой.Увеличьте.

#Пошаговое решение

  1. Проверьте доступную память и момент переполненияЗафиксируйте команду запуска и лог JavaScript heap out of memory. На Windows откройте «Диспетчер задач → Производительность → Память», в Linux выполните free -h; отдельно посмотрите лимит памяти контейнера, если Node.js работает в Docker. Увеличивать лимит кучи сверх доступной памяти опасно.
  2. Определите текущий лимит Node.jsВ терминале выполните node -e "const v8=require('node:v8'); console.log(Math.round(v8.getHeapStatistics().heap_size_limit/1048576))". Это примерный предел кучи в МиБ; он не равен общему потреблению процесса. Сравните с памятью компьютера и другими запущенными сервисами.
  3. Временно увеличьте лимит при наличии запасаЕсли в компьютере достаточно RAM, для теста запускайте node --max-old-space-size=4096 app.js; для npm-сборки на Unix NODE_OPTIONS=--max-old-space-size=4096 npm run build, на Windows PowerShell $env:NODE_OPTIONS="--max-old-space-size=4096"; npm run build. Значение 4096 — пример, а не универсальная норма.
  4. Проверьте утечки и объём входных данныхЕсли память растёт без ограничения, запустите отладку Node.js на тестовой машине с node --inspect app.js, откройте chrome://inspect и сравните снимки кучи. Для чтения больших файлов используйте потоки вместо загрузки всего содержимого в память. Проверьте повторной сборкой при одинаковых входных данных; не принимайте увеличение лимита за исправление утечки.

#Увеличение лимита

Задайте параметр --max-old-space-size в мегабайтах: node --max-old-space-size=4096 app.js. Для npm-скриптов используйте переменную окружения NODE_OPTIONS=--max-old-space-size=4096. Не ставьте значение больше физической памяти сервера, иначе процесс будет убит ядром (OOM-killer).

#Сборка проекта

Webpack, Vite и TypeScript на больших проектах требуют много памяти. Включите кэширование, отключите карты исходников в production при нехватке памяти, разбейте сборку на части и обновите инструменты — новые версии потребляют меньше. В CI увеличьте память раннера.

#Поиск утечек

В серверных приложениях растущая кривая памяти — признак утечки: глобальные кэши без ограничения, не удаляемые слушатели событий, замыкания, накапливающие данные. Используйте профилировщик (node --inspect, Chrome DevTools, heapdump) и сравнивайте снимки кучи. Обрабатывайте большие файлы потоками, а не целиком.

Linux · Терминал (Bash)Команда
Запуск сборки с увеличенным лимитом памяти (4 ГБ).
node -e "const v8=require('node:v8'); console.log(Math.round(v8.getHeapStatistics().heap_size_limit/1048576))"

#Где скачать и что открыть

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.