Ho un’istanza Discourse appena migrata su un nuovo server.
Ricevo l’errore nei log: PG::DiskFull (ERROR: could not resize shared memory segment \"/PostgreSQL.1759815625\" to 8388608 bytes: No space left on device )
È strano perché il server precedente (64 GB di RAM) non aveva questo problema e avevo impostato:
db_shared_buffers: "25632MB"
db_work_mem: "160MB"
Sul nuovo server (128 GB di RAM), non riesco ad aumentare oltre i valori predefiniti di base (ho provato a triplicare i valori sottostanti e ottengo lo stesso errore PG DiskFull):
db_shared_buffers: "128MB"
db_work_mem: "40MB"
La macchina precedente ha Docker 27.x (installato automaticamente tramite l’installer di Discourse). La nuova macchina ha installato docker.io come da istruzioni (quindi 26.x). Ho provato a passare a Docker 27.x per vedere se fosse correlato, ma non ha cambiato nulla. Entrambi sono sul ramo Stable di Discourse, versione 3.3.2.
Sembra che shm_size possa essere il colpevole principale:
Anche se non ho idea del perché non fosse un problema sul server precedente e lo sia sul nuovo server. L’unica altra differenza principale è che il vecchio server utilizza Ubuntu 22.04 LTS e il nuovo server è su 24.04 LTS.
Ho provato anche questo, ma le modifiche vengono sovrascritte quando il container viene riavviato
Quindi una rapida soluzione con nastro adesivo consiste semplicemente nell’modificare il file del launcher come:\n\n\ncd /var/discourse\nvi launcher\n\n\nQuindi sostituire tutte e 3 le occorrenze di\n--shm-size=512m\ncon la quantità di RAM desiderata (io sono andato con il 50% della RAM di sistema).\n\nQuindi ricompilare. Sarà necessario modificarlo di nuovo ogni volta che il launcher si aggiorna.\n\nSembra fare il suo lavoro per il momento.\n\n
Quindi, per dare seguito nel caso in cui qualcun altro riscontri questo problema: quanto sopra lo ha risolto per me. Non ho più bisogno di modificare shm-size nel launcher.
Questo è stato trovato dopo aver notato questo avviso durante la ricostruzione: ATTENZIONE Il memory overcommit deve essere abilitato! Senza di esso, un salvataggio in background o la replica potrebbero fallire in condizioni di memoria insufficiente. Essendo disabilitato, può anche causare fallimenti senza condizioni di memoria insufficiente, vedi https://github.com/jemalloc/jemalloc/issues/1328. Per risolvere questo problema, aggiungi 'vm.overcommit_memory = 1' a /etc/sysctl.conf e quindi riavvia o esegui il comando 'sysctl vm.overcommit_memory=1' affinché ciò abbia effetto.