Configurare il limite di memoria di ruby?

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
1 Mi Piace

Non sono sicuro di quanto siano rilevanti queste impostazioni nel Ruby moderno, ma @sam lo saprebbe meglio.

1 Mi Piace

Ahem, scusi, quello non è 2G, è 20M. Quindi niente a che vedere con la situazione che pensavo fosse. (Modifica: è peggio! Vedi sotto)

1 Mi Piace

Prova 20G. :wink: :slightly_smiling_face:

1 Mi Piace

Discourse ha un utilizzo della memoria prevedibile, quindi la impostazione che ti serve è il numero di worker Unicorn.

Se disponi di un server da 1 GB, il valore predefinito sarà di 2 worker, che dovrebbero funzionare bene con questa quantità limitata di memoria.

2 Mi Piace

Infatti, mentre si esegue come forum. Ma questo non è quello!

Durante gli aggiornamenti, alcune attività specificano quelle variabili d’ambiente per Ruby.

1 Mi Piace

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.

2 Mi Piace

Giusto, e la mia osservazione è che i limiti potrebbero essere impostati troppo alti per alcuni casi, quindi mi chiedo se sia possibile renderli configurabili.

2 Mi Piace

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.

4 Mi Piace

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].)

2 Mi Piace

Dovremmo ripristinare quell’argomento @sam? Ha un valore storico o è obsoleto?

1 Mi Piace

È 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.

5 Mi Piace