Impossibile aumentare db_shared_buffers (0,1% della RAM totale) e db_work_mem (0,03% della RAM totale)

Questo è un vero rompicapo :upside_down_face:

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

shm_size sembra essere codificato nel launcher:

Qualsiasi intuizione o aiuto sarebbe apprezzato! :meow_heart:

Si riferisce allo spazio sul disco rigido, non alla RAM.

1 Mi Piace

Grazie @pfaffman - l’avevo pensato anch’io inizialmente, ma poi ho letto questa discussione:

C’è anche molto spazio libero :confused:

1 Mi Piace

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\nwater leaking fix with flex tape

1 Mi Piace

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.

2 Mi Piace