Dzisiaj uruchomiłem skrypt do indeksowania systemu plików, aby odświeżyć indeks plików RAID, a po 4 godzinach zawiesił się z następującym błędem:
[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
Serwer jest wyposażony w 16 GB pamięci RAM i 24 GB wymiany SSD. Bardzo wątpię, że mój skrypt przekroczył 36 GB pamięci. Przynajmniej nie powinno
Skrypt tworzy indeks plików przechowywanych jako Array of Objects z metadanymi plików (daty modyfikacji, uprawnienia itp., Brak dużych danych)
Oto pełny kod skryptu: http://pastebin.com/mjaD76c3
W przeszłości eksperymentowałem już z dziwnymi problemami z węzłami za pomocą tego skryptu, co zmusiło mnie np. Do. podział indeksu na wiele plików, ponieważ węzeł glitching podczas pracy na tak dużych plikach jak String. Czy istnieje sposób na ulepszenie zarządzania pamięcią nodejs przy użyciu ogromnych zestawów danych?
ng serve
lub rozpowszechniasz wynikng build
folderu / dist przez inny serwer WWW, taki jak express? Ale jeśli Twój projekt Angular używa więcej niż standardowej pamięci 1,7 GB, być może będziesz mieć problem architektoniczny w swojej aplikacji? Wygląda na to, że używasz env rozwoju z nmp start Może to jest rozwiązanie dla niego github.com/mgechev/angular-seed/issues/2063Na wypadek, gdyby ktoś natrafił na to w środowisku, w którym nie może bezpośrednio ustawić właściwości węzła (w moim przypadku narzędzie do kompilacji):
Możesz ustawić opcje węzła za pomocą zmiennej środowiskowej, jeśli nie możesz przekazać ich w wierszu poleceń.
źródło
Jeśli chcesz zwiększyć wykorzystanie pamięci węzła na całym świecie - nie tylko pojedynczy skrypt, możesz wyeksportować zmienną środowiskową, jak poniżej:
export NODE_OPTIONS=--max_old_space_size=4096
Wtedy nie musisz grać z plikami podczas uruchamiania takich kompilacji
npm run build
.źródło
Napotkałem ten problem podczas próby debugowania za pomocą VSCode, więc po prostu chciałem dodać, jak można dodać argument do konfiguracji debugowania.
Możesz dodać go do
runtimeArgs
właściwości swojej konfiguracji wlaunch.json
.Zobacz przykład poniżej.
źródło
Oto kilka wartości flag, aby dodać dodatkowe informacje o tym, jak zezwolić na więcej pamięci podczas uruchamiania serwera węzła.
1 GB - 8 GB
źródło
Walczyłem z tym nawet po ustawieniu - max-old-space-size.
Potem zdałem sobie sprawę, że przed skryptem karmy muszę umieścić opcje - max-old-space-size.
najlepiej też podać obie składnie - max-old-space-size i --max_old_space_size mój skrypt dla karmy:
odniesienie https://github.com/angular/angular-cli/issues/1652
źródło
--max-old-space-size=8192 --optimize-for-size --max_old_space_size=8192 --optimize_for_size
i zadziałałoMiałem podobny problem podczas wykonywania kompilacji kątowej AOT. Poniższe polecenia pomogły mi.
Źródło: https://geeklearning.io/angular-aot-webpack-memory-trick/
źródło
sudo npm -g install increase-memory-limit --unsafe-perm
fwiw, pomocne może być znalezienie i naprawienie pamięci pamięci za pomocą czegoś takiego jak zegarek .
źródło
%appdata%
naciśnij klawisz Enter%appdata%
> folderu npmng.cmd
w swoim ulubionym edytorze--max_old_space_size=8192
do bloku IF i ELSETwój
node.cmd
plik wygląda tak po zmianie:źródło
Można użyć następującej zmiennej środowiskowej:
Kolejna uwaga:
console.log()
zużywa również pamięć w terminalu.właśnie próbował skomentować console.log () na terminalu. ponieważ zajmie to również pamięć.
źródło
NODE_OPTIONS= --max-old-space-size=somesize
jeśli chcesz zmienić pamięć globalnie dla węzła (systemu Windows), przejdź do zaawansowanych ustawień systemu -> zmienne środowiskowe -> nowa zmienna użytkownika
źródło
Próbowałem 👍 poniższy kod i działa dobrze ”.
wykonaj polecenie cmd, aby ustawić nowy rozmiar.
Lub możesz sprawdzić link, aby uzyskać więcej informacji https://github.com/nodejs/node/issues/10137#issuecomment-487255987
źródło
Chcę tylko dodać, że w niektórych systemach, nawet zwiększając limit pamięci węzła
--max-old-space-size
, to nie wystarczy i występuje taki błąd systemu operacyjnego:W tym przypadku prawdopodobnie dzieje się tak, ponieważ osiągnąłeś maksymalną mmapę na proces.
Możesz sprawdzić max_map_count, uruchamiając
i zwiększa to, uruchamiając
i napraw go, aby nie był resetowany po ponownym uruchomieniu, dodając ten wiersz
w
/etc/sysctl.conf
plikuSprawdź tutaj, aby uzyskać więcej informacji.
Dobrą metodą analizy błędu jest uruchomienie procesu za pomocą
strace
źródło
Ostatnio napotkałem ten sam problem i natknąłem się na ten wątek, ale mój problem
React
dotyczył aplikacji. Poniżej zmiany w poleceniu start węzła rozwiązały moje problemy.Składnia
Przykład
Dlaczego rozmiar to 16000 w maksymalnej starej przestrzeni?
Zasadniczo różni się w zależności od przydzielonej pamięci dla tego wątku i ustawień węzła.
Jak zweryfikować i podać odpowiedni rozmiar?
Zasadniczo pozostaje to w naszym silniku
v8
. poniższy kod pomaga zrozumieć rozmiar sterty silnika lokalnego węzła v8.źródło
Właśnie napotkałem ten sam problem z moją instancją EC2 t2.micro, która ma 1 GB pamięci.
Rozwiązałem problem, tworząc plik wymiany przy użyciu tego adresu URL i ustawiając następującą zmienną środowiskową.
export NODE_OPTIONS=--max_old_space_size=4096
Wreszcie problem zniknął.
Mam nadzieję, że będzie to pomocne w przyszłości.
źródło
Na wypadek, gdyby to pomogło osobom mającym ten problem podczas korzystania z aplikacji nodejs, które generują intensywne rejestrowanie, kolega rozwiązał ten problem, przesyłając standardowe dane wyjściowe do pliku.
źródło
Jeśli próbujesz uruchomić nie
node
sam, ale jakiś inny program, na przykładwebpack
możesz użyć zmiennej środowiskowej icross-env
pakietu:źródło
W celu powiązania projektów kątowych dodałem poniższy wiersz do mojego pliku pakage.json w sekcji skryptów .
Teraz, aby spakować mój kod, używam
npm run build-prod
zamiastng build --requiredFlagsHere
mam nadzieję że to pomoże!
źródło
Zaktualizuj węzeł do najnowszej wersji. Byłem na węźle 6.6 z tym błędem i zaktualizowałem go do wersji 8.9.4 i problem zniknął.
źródło
W moim przypadku uruchomiłem
npm install
poprzednią wersję węzła, po pewnym czasie zaktualizowałem wersję węzła i RAMnpm install
dla kilku modułów. Po tym otrzymałem ten błąd. Aby rozwiązać ten problem, usunąłem folder node_module z każdego projektu i uruchomiłemnpm install
ponownie.Mam nadzieję, że to może rozwiązać problem.
Uwaga: Działo się to na moim komputerze lokalnym i zostało naprawione tylko na komputerze lokalnym.
źródło
To polecenie działa idealnie. Mam 8 GB pamięci RAM w moim laptopie, więc ustawiłem rozmiar = 8192. Chodzi o RAM, a także potrzebujesz ustawić nazwę pliku. Biegnę npm gromadzeniu uruchom polecenie Dlatego użyłem build.js .
źródło
W moim przypadku zaktualizowałem wersję node.js do najnowszej i działało to jak urok.
źródło