Qualcuno potrebbe fornire istruzioni per configurare l’allocazione della memoria?
Considerando i messaggi sporadici del kernel “out of memory”/dump, l’aumento di 3 volte dello swapping e il progressivo degrado della risposta dell’applicazione, sembra che la nostra app vada talvolta in carenza di memoria. Il nostro sistema ha attualmente 8 GB di RAM e 2 GB di swap. Di seguito i dettagli.
Ho esaminato le istruzioni per aggiungere più RAM fisica e swap su ("Cannot allocate memory" when upgrading), ma non sono riuscito a trovare dettagli su come allocarli.
Per quanto riguarda le configurazioni della memoria, stiamo utilizzando tutti i valori predefiniti. Il sistema si riprende dopo alcuni minuti, ma con l’aumento dell’utilizzo pensiamo sia il momento di informarci su come migliorare le prestazioni. Tuttavia, non sono sicuro di dove e come configurare questo aspetto. Aumentare la memoria allocata per l’istanza Docker o per il numero di unicorni Ruby (o entrambi)?
Sono un amministratore di sistema senza esperienza con Ruby e con esperienza limitata su Docker, quindi indicarmi la direzione del file di configurazione e la sintassi da usare mi sarebbe di grande aiuto.
Hai rieseguito discourse-setup dopo aver aumentato la RAM? Questo aggiusterà di conseguenza le impostazioni di memoria. Puoi anche leggere i commenti in app.yml e modificarli.
Ciao Rafael e team, mi chiamo Serge e lavoro con il signor Happy Lee, che è appena partito per le tanto attese vacanze, quindi mi occuperò di questo problema.
Per aggiungere alla descrizione: il server è stato originariamente costruito con 8 GB di RAM e 2 GB di swap. Non l’abbiamo aggiornato da allora.
Nel log di sistema vedo prove che Ruby è il processo che consuma tutta la memoria e causa l’OoM del kernel:
Killed process 2960 (ruby) total-vm:10031472kB, anon-rss:7438148kB, file-rss:0kB
Non sono un esperto di Ruby, quindi non sono sicuro di come vedere quale processo in Ruby stia consumando tanta memoria.
il plugin è stato finanziato per lo sviluppo dalla nostra organizzazione, quindi purtroppo non sono autorizzato a esporre qui il codice sorgente. Inoltre, dato che il plugin funziona senza problemi su altre istanze, questo mi porta a pensare di aumentare le risorse di memoria del server per questa specifica istanza. La macchina è una VM, quindi posso facilmente raddoppiare la quantità di memoria e verificare se questo risolverà il problema.
Non c’è molto che possiamo fare per eseguire il debug di un codice che non possiamo vedere dal nostro lato. Potresti voler configurare il plugin Prometheus exporter per Discourse per monitorare le metriche della tua istanza.
Anche le altre istanze eseguono Ruby 2.3.1-2~ubuntu16.04.14?
Forse non è rilevante, ma:
Quindi era chiaramente un bug di Ruby. Abbiamo testato su più versioni di Ruby e abbiamo determinato che solo le versioni 2.3.x e 2.4.x presentavano la perdita di memoria (a quanto pare è stata risolta in Ruby 2.5.0****).
E la documentazione di Discourse richiede [Ruby 2.6+]
Ciao Benjamin, anche le altre istanze eseguono Ruby 2.3.1-2~ubuntu16.04.14; testerò un aggiornamento per verificare che non interrompa la nostra configurazione Docker.