PG::ConnectionBad causa il temporaneo crash del sito

Nei Log degli errori ricevo intermittentemente i seguenti messaggi. Questo rende il sito irraggiungibile per 15-30 secondi finché non riprende.

Messaggio di errore Info:

PG::ConnectionBad (FATAL: il sistema del database è in modalità di ripristino) /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/pg-1.2.3/lib/pg.rb:58:in `initialize’

Messaggio di errore Env:


Una cosa davvero strana che ho notato esaminando questi log è che sembra cercare la cartella in /var/www/… ma tale cartella non esiste sul server. Dovrebbe esistere? Qualsiasi aiuto è apprezzato.

Se il database è danneggiato, allora il sito è necessariamente compromesso. Devi capire il motivo. Le cause più comuni sono la mancanza di RAM e di spazio su disco. Il mio indovinello è la RAM. Quanta RAM hai? Che output restituisce free -h?

Quello è il percorso all’interno del container. Se esegui ./launcher enter app, lo vedrai lì.

Penso che tu abbia ragione. Ecco l’output di free -h.

image

131M di memoria libera non mi sembrano molti.

Beh, hai 646M disponibili e 4GB sono sufficienti da sconsigliare l’uso dello swap. Quanto è grande il tuo database? Quale traffico ricevi? Sul server è in esecuzione qualcosa oltre a Discourse?

Nessun altro processo oltre a Discourse è in esecuzione sul server.

Per ottenere la dimensione, ho eseguito:

./launcher enter app
rails db
SELECT pg_size_pretty(pg_database_size(current_database()));

L’output risultante è stato 4650 MB (1 riga).

Per quanto riguarda il traffico:
Ieri abbiamo avuto 1.200 visualizzazioni di pagina, 12.400 nell’ultima settimana. Circa 160 utenti nell’ultima settimana e circa 80 utenti contemporanei in qualsiasi momento.

Se hai spazio su disco disponibile, aggiungi una partizione di swap per guadagnare un po’ di respiro temporaneo.

Ho aggiunto 1 GB di swap. Vedremo cosa succede durante il traffico intenso stasera.

image

Sei il massimo. Lo swap da 1 GB sembra aver risolto tutti i problemi di crash. Sono sinceramente contento che fosse un problema di RAM e non del database. Intendo aumentare la quantità di RAM sul server nel weekend. Grazie mille a tutti quelli che hanno contribuito in questa discussione!

Dopo averlo fatto, esegui di nuovo discourse-setup per resettare i parametri di memoria.

Sono curioso di sapere se fossero stati tarati correttamente fin dall’inizio. :man_shrugging:t2:

Onestamente non sono sicuro. Prima di questo avevamo eseguito una ricostruzione e un riavvio del server dopo aver cambiato l’hardware un po’ di tempo fa. Presumo che dopo un riavvio Discourse abbia rilevato tutte le modifiche al sistema.

Dopo aver installato il file di swap, ci sono stati momenti in cui venivano utilizzati oltre 4 GB di “memoria”, quindi sembra che questo fosse sicuramente il problema durante i nostri periodi di maggior affluenza, che coincidono con gli orari in cui il server si è bloccato. Oggi abbiamo effettuato un aggiornamento e il sito sta funzionando molto bene.

Ma non è così. Ci sono impostazioni che controllano, ad esempio, quanta RAM può utilizzare il database, ed sono incorporate in app.yml. Puoi modificarle manualmente o rieseguire discourse-setup.

Ho rieseguito la funzione discourse-setup oggi, poiché non ne ero a conoscenza in precedenza. Era nuova per me.