Da quando abbiamo ricostruito il sistema oggi, stiamo riscontrando un elevato numero di errori del server. Sembra trattarsi di un problema di connessione nginx; nel file nginx/error.log vedo talvolta raffiche di messaggi 768 worker_connections are not enough come questo:
2021/06/02 10:42:21 [alert] 1143#1143: *28468 1768 worker_connections are not enough while connecting to upstream, client: (IP rimossa), server: _, request: "POST /message-bus/8fc08436f86f47479cf0dad3deb5c4dc/poll?dlp=t HTTP/1.1", upstream: "http://127.0.0.1:3000/message-bus/8fc08436f86f47479cf0dad3deb5c4dc/poll?dlp=t", host: "blenderartists.org", referrer: "https://blenderartists.org/t/convert-multiple-objects-to-single-mesh-with-vertex-grouping/489173/2"
Avete idee su come possiamo risolvere il problema? Abbiamo abbondante CPU e memoria disponibili: potremmo aumentare il numero di ‘worker connections’?
Aggiornamento: ho aumentato temporaneamente le connessioni dei worker, ma continuo a ricevere questi errori (meno frequentemente e per un numero maggiore di worker). Sono davvero curioso di sapere se ci siano stati cambiamenti recenti che potrebbero causare questo problema o come potrei indagare meglio.
## Eventuali comandi personalizzati da eseguire dopo la compilazione
run:
- exec: echo "Inizio dei comandi personalizzati"
- replace:
filename: "/etc/nginx/letsencrypt.conf"
from: "worker_connections 768"
to: "worker_connections 1768"
È interessante che ciò sia accaduto dopo una ricostruzione. Hai eseguito recentemente azioni in massa? Ti consiglio di controllare i log di Sidekiq per vedere se sono presenti un gran numero di job anche lì.
Ho effettivamente eseguito alcune azioni in blocco di recente, poiché siamo passati alla TC di anteprima delle miniature, ma non c’è nulla nella mia coda Sidekiq, quindi posso escluderlo con certezza.
Non ne ho idea - forse sì? Hai qualche idea su come posso verificare?
Esatto. Ma ho disabilitato qualsiasi accelerazione e lo uso essenzialmente solo per memorizzare nella cache immagini e avatar. Non è mai stato un problema fino a oggi..
Haha, di solito le persone usano Google Analytics o qualcosa di simile per ottenere queste informazioni. La dashboard di Discourse mostra le visualizzazioni di pagina giornaliere e le visite degli utenti, che possono essere utilizzate anche per questo scopo.
Non è vero, l’intero tuo sito è servito tramite Cloudflare:
Tuttavia, ciò potrebbe essere completamente irrilevante, poiché il tuo nginx sta segnalando problemi con le connessioni upstream invece che downstream, il che significa che sta esaurendo le connessioni tra nginx ⟷ unicorn.
Dato che manteniamo una connessione aperta per ogni visitatore a causa di message_bus (servizio di aggiornamenti in tempo reale), questo è in qualche modo atteso se il tuo sito è piuttosto popolare.
Aumentare worker_processes e worker_connections è sicuro e sembra avere senso nel tuo caso. Di default, worker_processes è impostato sul numero di core della tua CPU. Quanti core CPU hai?
Vero L’abbiamo abbandonato molto tempo fa.. Abbiamo circa 250k visualizzazioni di pagina al giorno (inclusi i bot), quindi 500 non sembrano insoliti. Le visite degli utenti tracciano solo le visite degli utenti registrati, giusto?
Esatto - dobbiamo passare le nostre richieste attraverso CF, ma non permettiamo loro di toccare il nostro JavaScript, ecc.
Abbiamo 12 core, 64GB. Il carico tipico è circa 2, e utilizziamo il 50% della nostra RAM.
La formula per le connessioni è worker_processes * worker_connections, che dovrebbe essere 12 * 768, ovvero (clic clack) 9216. Ma i tuoi log indicano 1768…
Prova questo nel tuo app.yml:
## Qualsiasi comando personalizzato da eseguire dopo la compilazione
run:
- exec: echo "Inizio dei comandi personalizzati"
- replace:
filename: "/etc/nginx/nginx.conf"
from: "worker_connections 768"
to: "worker_connections 2000"
- replace:
filename: "/etc/nginx/nginx.conf"
from: "worker_processes auto"
to: "worker_processes 10"
Tieni presente che il tuo blocco nel post 2 sta agendo sul file sbagliato!
Ho incollato il codice sbagliato: ho provato prima il modello di letsencrypt, ma ho finito per modificare nginx.conf impostando 1768 connessioni worker.
Proverò i tuoi valori: tornerò a riferirti come va.
Esatto. Abbiamo anche aumentato il valore predefinito a 4k nella stessa patch, quindi gli amministratori potrebbero voler valutare attentamente se hanno ancora bisogno di aumentarlo.