2015-12-18 14 views
7

Po uruchomieniu serwera eksportowanie 2 GB (w przybliżeniu) danych z mongodb do redis, a następnie otrzymywanie błędu jako FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory.jak zwiększyć domyślną pamięć nodejs?

Następnie uruchomiłem serwer za pomocą tego polecenia node --max-old-space-size=4076 server.js i działa dobrze. Ale musi skonfigurować aplikację nodejs, aby serwer węzłowy zawsze zaczynał się od pamięci 4GB. Proszę mi pomóc, jak to naprawić? Dzięki.

+0

tylko z ciekawości, czy jest coś, co powstrzymuje cię od wprowadzenia tego w skrypcie startowym npm? –

+0

Cześć James, jestem nowicjuszem dla nodejs. czy możesz mi powiedzieć, gdzie dokładnie muszę to zatrzymać? czy możesz podać przykładowy kod? jestem wam bardzo wdzięczny. – anil

+0

Wysłałem odpowiedź z kilkoma szczegółami, które mogłem podać w komentarzu. Mam nadzieję, że to ci pomoże. –

Odpowiedz

0

węzła SomeScript.js --max-old-space-size = 8192

+0

@M T Head: Dziękuję – anil

12

jedna opcja: npm uruchomić skrypty

https://docs.npmjs.com/misc/scripts

Są one dodawane do package.json pod "skrypty" sekcja

{ 
    //other package.json stuff 

    "scripts":{ 
    "start": "node --max-old-space-size=4076 server.js" 
    } 

} 

następnie uruchomić go nazwać npm start zamiast wpisywania node + args + punkt wykonywania.

Uwaga: jeśli nazwać to coś innego niż początek, npm run [yourScriptNameHere] będzie polecenie, aby go

uruchomić ten jest lepszym rozwiązaniem niż próby rekonfiguracji węzła do korzystania 4GB domyślnie (nawet nie wiem, czy jego możliwe tbh). To sprawia, że ​​twoja konfiguracja jest przenośna dzięki metodom wypieku w jej obecnym stanie i pozwala innym, którzy napotkają twój kod w przyszłości, aby zrozumieć, że to jest potrzeba.

+0

jest jakiś sposób, aby zmienić go na stałe dla wszystkich projektów? –

+0

@InzamamMalik nie, że znam - lub może znaleźć na szybkie wyszukiwanie google. Wierzę, że jest to również zgodne z projektem. Oryginalny post miał przypadek użycia, w którym można było rozwiązać dane przesyłane strumieniowo z jednego punktu końcowego na drugi i nie buforując go w pamięci. Jest szansa, że ​​jeśli chcesz cały czas przesłonić ograniczenia pamięci węzła (lub naprawdę, w wersji 8), prawdopodobnie wystąpi problem z twoją implementacją. Jeśli nadal czujesz, że potrzebujesz go do każdego procesu, skrypt startowy naprawdę nie wydaje się niewygodny. –