2015-12-18 30 views
7

All'avvio del server, esportando 2 GB (approssimativamente) di dati da mongodb a redis, quindi ricevendo l'errore come FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory.come aumentare la memoria predefinita di nodejs?

Quindi avviato il server con questo comando node --max-old-space-size=4076 server.js e funziona correttamente. Ma ha bisogno di configurare in nodejs applicaton in modo che il server di nodo inizia sempre con la memoria da 4 GB. Per favore aiutami come risolvere questo problema? Grazie.

+0

solo per curiosità, c'è qualcosa che vi impedisce di mettere questo in uno script di avvio NPM? –

+0

Ciao James, sono un novizio di nodejs. puoi dirmi per favore esattamente dove devo mantenere questo? puoi fornire un codice di esempio? ti sono molto grato – anil

+0

Ho inviato una risposta con alcuni dettagli in più di quelli che avrei potuto fornire in un commento. Spero che ti aiuti. –

risposta

0

nodo SomeScript.js --max-old-spazio-size = 8192

+0

@ M T Head: Grazie – anil

12

una sola opzione: NPM avviare gli script

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

Questi vengono aggiunti al tuo package.json nella sezione "script"

{ 
    //other package.json stuff 

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

} 

poi eseguirlo chiamare npm start invece di digitare nodo + args + punto di esecuzione.

Nota: se è il nome qualcosa di diverso inizio, npm run [yourScriptNameHere] sarà il comando per eseguirlo

Questa è un'opzione migliore che cercare di riconfigurare il nodo di utilizzare 4gb di default (non so nemmeno se il suo possibile tbh). Rende portatile la tua configurazione utilizzando i metodi cotti così come sono e consente ad altri utenti che incontrano il tuo codice in futuro di capire che questo è necessario.

+0

c'è un modo per cambiarlo in modo permanente per tutti i progetti? –

+0

@InzamamMalik non che io sappia - o che potrebbe trovare su una rapida ricerca su google. Credo che questo sia anche di design. Il post originale aveva un caso d'uso che avrebbe potuto essere risolto lo streaming di dati da un endpoint all'altro e non il buffering tutto in memoria. Le probabilità sono che se hai bisogno di sovrascrivere i limiti di memoria del nodo (o in realtà, v8) tutto il tempo, c'è probabilmente un problema architettonico con la tua implementazione. Se ritieni ancora di averne bisogno per ogni processo, lo script di avvio non sembra così scomodo. –

Problemi correlati