Ho notato un avviso nei registri di heroku che ultimamente diceva che mi sembrava nuovo
web.1: rilevata 512 MB di memoria disponibile, limite di 512 MB per processo (WEB_MEMORY)
- exec e PATH su heroku con buildpacks
- Gli ascoltatori di Firebase occupano un'enorme quantità di memoria
- Perché la mia app non stabilisce la connessione web socket su Heroku?
- Node.js Heroku Deployment - Fails To Exec script Postinstall per installare Bower
- Errori relativi a 2 dynos su Heroku con socket.io / socket.io-redis / rediscloud / node.js
web.1: Recommending WEB_CONCURRENCY = 1
Ho fatto alcune ricerche e ho trovato questo articolo del cluster , che è il modo “predefinito” per usare i cluster in nodejs, ma è totalmente in contraddizione con un articolo appena aggiornato che contiene questa nuova variabile d’ambiente WEB_CONCURRENCY
e con un suggerimento di dimensioni diverse per ogni banco è molto più piccolo, btw)
Il primo collegamento è a partire da luglio 2014 ed era il modo consigliato di fare le cose. Tuttavia, i dynos di Heroku sono abbastanza incentrati sulla memoria, ed è molto facile superare il limite di memoria assegnato quando si utilizza il numero massimo di core per CPU (come suggerisce il primo articolo).
Invece, la nuova raccomandazione è di profilare la tua app e capire quanta memoria è necessaria per processo. Impostare una variabile di ambiente WEB_MEMORY
su questo valore, quindi aggiornare il codice cluster nel modo seguente:
var cluster = require('cluster'); var numWorkers = process.env.WEB_CONCURRENCY; if(cluster.isMaster) { // Master process: fork our child processes for (var i = 0; i < numWorkers; i++) { cluster.fork(); } // Respawn any child processes that die cluster.on('exit', function() { cluster.fork(); }); } else { // Child process, put app initialisation code here. }
Usando la variabile WEB_MEMORY
, Heroku può generare un valore WEB_CONCURRENCY
base alle dimensioni del banco prova in esecuzione e quindi assegnare il numero corretto di processi per garantire che l'app non superi il limite di memoria.
Per inciso, se superi l'allocazione di memoria (512 MB per dyno per un dyno 1x), lo spazio di swap verrà utilizzato per l'eccesso. Ciò rallenterà la tua app, causando un aumento dei tempi di richiesta e in generale contribuirà a rallentare. Se superi l'utilizzo della memoria di troppo (circa tre volte l'allocazione), Heroku riavvierà il tuo banco.