Si potrebbe rendere un’opzione di configurazione del sito per quanto riguarda la quantità di memoria utilizzabile? Attualmente la configurazione è impostata a 2G (Modifica: ho sbagliato, vedi sotto) - in precedenza era a 4G - eppure la configurazione hardware consigliata è 1G + swap. A mio parere, un nodo da 1G potrebbe facilmente andare in una frenesia di paging se l’utilizzo di Ruby raggiungesse davvero i 2G.
Da un registro di aggiornamento:
Migrating default
Seeding default
*** Bundling assets. This will take a while ***
$ RUBY_GC_MALLOC_LIMIT_MAX=20971520 RUBY_GC_OLDMALLOC_LIMIT_MAX=20971520 RUBY_GC_HEAP_GROWTH_MAX_SLOTS=50000 RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=0.9 bundle exec rake assets:precompile
Purging temp files
Bundling assets
Sì, durante gli aggiornamenti impostiamo quelle variabili in modo che l’aggiornamento non fallisca a causa di problemi di memoria su macchine con specifiche molto basse.
Giusto, e la mia osservazione è che i limiti potrebbero essere impostati troppo alti per alcuni casi, quindi mi chiedo se sia possibile renderli configurabili.
Abbiamo testato questa procedura molte volte nel corso degli anni e possiamo garantire che funzionerà perfettamente per piccole comunità che utilizzano un VPS da 1 GB. Durante l’aggiornamento, il processo termina anche i worker Unicorn aggiuntivi per liberare memoria e facilitare l’operazione.
Puoi leggere il codice derivante da questo commit:
Se riesci a riprodurre il problema su un droplet di Digital Ocean, saremo lieti di esaminarlo.
Se questo è un requisito indispensabile, puoi fare un fork del plugin e adattarlo alle tue esigenze.
Grazie, ora sto ricevendo un’immagine. (Due punti molto importanti: queste impostazioni GC sono regolate specificamente per gli aggiornamenti e le unità sono in byte, quindi il limite è attualmente impostato a 20 MB. Ci sono dettagli utili e interessanti in questo thread precedente [link all’archivio perché non è disponibile per me al momento].)
È certamente obsoleto: l’ultima versione di Ruby ha diversi limiti di malloc. È un argomento interessante con un certo valore storico, ma richiederebbe un grande cartello “Obsoleto” in alto.
Il nostro aggiornamento è già eseguito al massimo delle sue capacità; la cosa migliore che possiamo fare oltre a questo è ridurre la disponibilità. Se la memoria è estremamente limitata, dovrai accettare interruzioni del servizio durante l’aggiornamento.