Crash di Discourse a causa di problemi di connessione PSQL

Abbiamo continuato a ricevere questo messaggio sul nostro forum. (ogni 3-4 ore circa). Abbiamo 16 core di CPU e 32 GB di RAM. Non penso che le risorse siano un problema.

Oops
Il software che alimenta questo forum di discussione ha riscontrato un problema imprevisto. Ci scusiamo per l'inconveniente.

Informazioni dettagliate sull'errore sono state registrate e è stata generata una notifica automatica. Ci daremo un'occhiata.

Non è necessaria alcuna ulteriore azione. Tuttavia, se la condizione di errore persiste, è possibile fornire ulteriori dettagli, inclusi i passaggi per riprodurre l'errore, pubblicando un argomento di discussione nella categoria di feedback del sito.

Il log di produzione mostra


app/models/user_auth_token.rb:125:in `lookup'
lib/auth/default_current_user_provider.rb:131:in `current_user'
lib/current_user.rb:35:in `current_user'
app/controllers/application_controller.rb:1047:in `rate_limit_crawlers'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
lib/middleware/anonymous_cache.rb:393:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:14:in `call'
config/initializers/100-silence_logger.rb:27:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:236:in `call'
Errore imprevisto in Message Bus: ActiveRecord::ConnectionNotEstablished: connessione al server in \"172.17.0.2\", porta 5432 fallita: FATAL: gli slot di connessione rimanenti sono riservati per le connessioni superuser non di replica.

Errore imprevisto in Message Bus: ActiveRecord::ConnectionNotEstablished: connessione al server in \"172.17.0.2\", porta 5432 fallita: FATAL: gli slot di connessione rimanenti sono riservati per le connessioni superuser non di replica.

Errore imprevisto in Message Bus: ActiveRecord::ConnectionNotEstablished: connessione al server in \"172.17.0.2\", porta 5432 fallita: FATAL: gli slot di connessione rimanenti sono riservati per le connessioni superuser non di replica.

Errore imprevisto in Message Bus: ActiveRecord::ConnectionNotEstablished: connessione al server in \"172.17.0.2\", porta 5432 fallita: FATAL: gli slot di connessione rimanenti sono riservati per le connessioni superuser non di replica.

Abbiamo impostato la seguente configurazione in

UNICORN_WORKERS: 32
UNICORN_SIDEKIQS: 2

e per psql

db_shared_buffers: "4096MB"

Per favore, fatemi sapere cos’altro posso fare per migliorare la configurazione e assicurarmi che il server non si blocchi.

Dare a postgres (db_shared_buffers) almeno 16GB, se non 20GB.

Ma devi creare più connessioni al DB. Non ricordo esattamente come fare.

Penso che sia max_connections in /etc/postgresql/postgresql.conf (all’interno del container che esegue postgres) che devi modificare.

1 Mi Piace

Penso anch’io. :+1:

Sei sicuro? Sembra molto. Vedi PostgreSQL: Documentation: 13: 19.4. Resource Consumption

Se disponi di un server di database dedicato con 1 GB o più di RAM, un valore iniziale ragionevole per shared_buffers è il 25% della memoria del tuo sistema. Esistono alcuni carichi di lavoro in cui impostazioni ancora più grandi per shared_buffers sono efficaci, ma poiché PostgreSQL si basa anche sulla cache del sistema operativo, è improbabile che un’allocazione di oltre il 40% della RAM a shared_buffers funzioni meglio di una quantità inferiore.

E questo non è un server di database dedicato, ci sono anche 32 processi unicorn su di esso.

Mi fido sempre di te in questioni come queste, e pensavo di citare un consiglio che mi avevi dato in passato, quindi, NO non sono sicuro. :rofl:

È abbastanza chiaro che il problema sono le connessioni e aumentare la RAM al 25% di 32 GB potrebbe aiutare in generale, ma non è la causa dell’errore.

EDIT:

Ah! È esattamente quello che ricordavo, tranne per il fatto che sembra che stessi per superare il 50%. . .

1 Mi Piace

Mi dichiaro quasi colpevole

Ma quello era allora… :wink:

:100:

2 Mi Piace

Perché? Sono la causa dell’esaurimento degli slot di connessione.

1 Mi Piace

Credo di aver letto da qualche parte che UNICORN WORKER dovrebbe essere 2 * CPU. Quindi ho fatto i calcoli per ottenere 32. Dovrei ridurre la scala?

Abbiamo provato a modificare l’impostazione del timeout per PSQL eseguendo ALTER ROLE discourse SET statement_timeout = '30000';. E questa query è quella che è stata bloccata, una volta ogni paio d’ore.


Non so se tu o qualcun altro avete qualche idea su cosa sia successo?

No, per favore rimuovi questo e lascia che vengano applicati i valori predefiniti. Questo è il classico caso di ottimizzazione prematura.

2 Mi Piace

Sì, hai toccato cose che non avresti dovuto toccare :wink:

1 Mi Piace

9 messaggi sono stati divisi in un nuovo argomento: Raccomandazione per il numero di worker: core × 2?