Сегодня я запустил свой скрипт для индексации файловой системы, чтобы обновить индекс файлов RAID, и через 4 часа он вышел из строя со следующей ошибкой:
[md5:] 241613/241627 97.5%
[md5:] 241614/241627 97.5%
[md5:] 241625/241627 98.1%
Creating missing list... (79570 files missing)
Creating new files list... (241627 new files)
<--- Last few GCs --->
11629672 ms: Mark-sweep 1174.6 (1426.5) -> 1172.4 (1418.3) MB, 659.9 / 0 ms [allocation failure] [GC in old space requested].
11630371 ms: Mark-sweep 1172.4 (1418.3) -> 1172.4 (1411.3) MB, 698.9 / 0 ms [allocation failure] [GC in old space requested].
11631105 ms: Mark-sweep 1172.4 (1411.3) -> 1172.4 (1389.3) MB, 733.5 / 0 ms [last resort gc].
11631778 ms: Mark-sweep 1172.4 (1389.3) -> 1172.4 (1368.3) MB, 673.6 / 0 ms [last resort gc].
<--- JS stacktrace --->
==== JS stack trace =========================================
Security context: 0x3d1d329c9e59 <JS Object>
1: SparseJoinWithSeparatorJS(aka SparseJoinWithSeparatorJS) [native array.js:~84] [pc=0x3629ef689ad0] (this=0x3d1d32904189 <undefined>,w=0x2b690ce91071 <JS Array[241627]>,L=241627,M=0x3d1d329b4a11 <JS Function ConvertToString (SharedFunctionInfo 0x3d1d3294ef79)>,N=0x7c953bf4d49 <String[4]\: ,\n >)
2: Join(aka Join) [native array.js:143] [pc=0x3629ef616696] (this=0x3d1d32904189 <undefin...
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
1: node::Abort() [/usr/bin/node]
2: 0xe2c5fc [/usr/bin/node]
3: v8::Utils::ReportApiFailure(char const*, char const*) [/usr/bin/node]
4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [/usr/bin/node]
5: v8::internal::Factory::NewRawTwoByteString(int, v8::internal::PretenureFlag) [/usr/bin/node]
6: v8::internal::Runtime_SparseJoinWithSeparator(int, v8::internal::Object**, v8::internal::Isolate*) [/usr/bin/node]
7: 0x3629ef50961b
Сервер оснащен 16 ГБ ОЗУ и 24 ГБ SSD подкачки. Я сильно сомневаюсь, что мой сценарий превысил 36 ГБ памяти. По крайней мере, это не должно
Скрипт создает индекс файлов, хранящихся в виде массива объектов с метаданными файлов (даты изменения, разрешения и т. Д., Без больших данных)
Вот полный код скрипта: http://pastebin.com/mjaD76c3
Я уже испытывал странные проблемы с узлами в прошлом с этим скриптом, что заставило меня, например. при работе с такими большими файлами, как String, индекс делился на несколько файлов, так как узел глючил. Есть ли способ улучшить управление памятью nodejs с огромными наборами данных?
ng serve
или распространяете результатng build
папки / dist другим веб-сервером, таким как express? Но если ваш проект Angular использует больше, чем стандартная память объемом 1,7 ГБ, у вас может возникнуть архитектурная проблема в вашем приложении? Похоже, что вы используете env разработки с nmp start, может быть, это решение для него github.com/mgechev/angular-seed/issues/2063На всякий случай, если кто-то столкнется с этим в среде, где он не может установить свойства узла напрямую (в моем случае это инструмент сборки):
Вы можете установить параметры узла с помощью переменной среды, если не можете передать их в командной строке.
источник
Если вы хотите увеличить использование памяти узла глобально, а не только одним скриптом, вы можете экспортировать переменную среды, например:
export NODE_OPTIONS=--max_old_space_size=4096
Тогда вам не нужно играть с файлами при запуске сборок, как
npm run build
.источник
Я столкнулся с этой проблемой при попытке отладки с помощью VSCode, поэтому просто хотел добавить, как вы можете добавить аргумент в настройку отладки.
Вы можете добавить его к
runtimeArgs
свойству конфигурации вlaunch.json
.Смотрите пример ниже.
источник
Вот некоторые значения флага, чтобы добавить дополнительную информацию о том, как выделить больше памяти при запуске сервера вашего узла.
1 ГБ - 8 ГБ
источник
я боролся с этим даже после установки --max-old-space-size.
Тогда я понял, что нужно поставить опции --max-old-space-size перед сценарием кармы.
Также лучше всего указать оба синтаксиса --max-old-space-size и --max_old_space_size мой скрипт для кармы:
ссылка https://github.com/angular/angular-cli/issues/1652
источник
--max-old-space-size=8192 --optimize-for-size --max_old_space_size=8192 --optimize_for_size
и это работалоУ меня была похожая проблема, когда я выполнял угловую сборку AOT. Следующие команды помогли мне.
Источник: https://geeklearning.io/angular-aot-webpack-memory-trick/
источник
sudo npm -g install increase-memory-limit --unsafe-perm
Кстати, поиск и исправление памяти с помощью чего-то вроде memwatch может помочь.
источник
%appdata%
нажмите Enter%appdata%
> папку npmng.cmd
в вашем любимом редакторе--max_old_space_size=8192
в блок IF и ELSEВаш
node.cmd
файл выглядит так после изменения:источник
Можно использовать следующую переменную среды:
Еще одна заметка:
console.log()
также потребляет память в терминале.только что попытался прокомментировать console.log () на терминале. потому что это также займет память.
источник
NODE_OPTIONS= --max-old-space-size=somesize
если вы хотите глобально изменить память для узла (windows), перейдите в дополнительные системные настройки -> переменные среды -> новая переменная пользователя
источник
Я попробовал «приведенный ниже код и он работает нормально».
выполнить cmd, чтобы установить новый размер.
Или вы можете проверить ссылку для получения дополнительной информации https://github.com/nodejs/node/issues/10137#issuecomment-487255987
источник
Я просто хочу добавить, что в некоторых системах, даже увеличивая ограничение памяти узла
--max-old-space-size
, этого недостаточно, и возникает ошибка ОС, подобная этой:В этом случае, вероятно, потому, что вы достигли максимального значения mmap на процесс.
Вы можете проверить max_map_count, запустив
и увеличивает его, запустив
и исправить это, чтобы не было сброса после перезагрузки, добавив эту строку
в
/etc/sysctl.conf
файле.Проверьте здесь для получения дополнительной информации.
Хороший метод для анализа ошибки - запустить процесс с
strace
источник
Я недавно столкнулся с этой же проблемой и столкнулся с этой темой, но моя проблема была с
React
App. Ниже изменения в команде запуска узла решили мои проблемы.Синтаксис
пример
Почему размер 16000 в макс. Старомодном размере?
Как правило, это зависит от того, какая память выделена для этого потока, а также от настроек вашего узла.
Как проверить и дать правильный размер?
Это в основном остаться в нашем двигателе
v8
. код ниже поможет вам понять размер кучи вашего локального узла v8.источник
Я только что столкнулся с той же проблемой с моим экземпляром EC2 t2.micro, который имеет 1 ГБ памяти.
Я решил проблему, создав файл подкачки с помощью этого URL-адреса и установив следующую переменную среды.
export NODE_OPTIONS=--max_old_space_size=4096
Наконец проблема ушла.
Я надеюсь, что это будет полезно для будущего.
источник
На случай, если это может помочь людям, имеющим эту проблему, при использовании приложений nodejs, которые производят интенсивное ведение журнала, коллега решил эту проблему, передав стандартные выходные данные в файл.
источник
Если вы пытаетесь запустить не
node
сам, а какой-то другой софт, например,webpack
вы можете использовать переменную окружения иcross-env
пакет:источник
Для связывания угловых проектов я добавил следующую строку в мой файл pakage.json в разделе скриптов .
Теперь, чтобы связать мой код, я использую
npm run build-prod
вместоng build --requiredFlagsHere
надеюсь это поможет!
источник
Обновите узел до последней версии. Я был на узле 6.6 с этой ошибкой и обновился до 8.9.4, и проблема ушла.
источник
В моем случае я работал
npm install
на предыдущей версии узла, через некоторое время я обновил версию узла и оперативную памятьnpm install
для нескольких модулей. После этого я получил эту ошибку. Чтобы решить эту проблему, я удалил папку node_module из каждого проекта и запустилnpm install
снова .Надеюсь, что это может решить проблему.
Примечание: это происходило на моей локальной машине, и это было исправлено только на локальной машине.
источник
Эта команда работает отлично. У меня в ноутбуке 8 ГБ памяти, поэтому я установил размер = 8192. Это все о оперативной памяти, а также вам нужно установить имя файла. Я запускаю команду npm run build , поэтому я использовал build.js .
источник
В моем случае я обновил версию node.js до последней версии, и она работала как очаровательная программа.
источник