Tengo una instancia de Discourse recién migrada en un servidor nuevo.
Estoy recibiendo el siguiente error en los registros: PG::DiskFull (ERROR: no se pudo redimensionar el segmento de memoria compartida "/PostgreSQL.1759815625" a 8388608 bytes: No queda espacio en el dispositivo)
Es extraño porque el servidor anterior (64 GB de RAM) no tenía este problema y tenía configurados estos valores:
db_shared_buffers: "25632MB"
db_work_mem: "160MB"
En el nuevo servidor (128 GB de RAM), no puedo aumentar por encima de los valores predeterminados (intenté triplicar los valores a continuación y obtuve el mismo error PG DiskFull):
db_shared_buffers: "128MB"
db_work_mem: "40MB"
La máquina anterior tiene Docker 27.x (instalado automáticamente a través del instalador de Discourse). La nueva máquina instaló docker.io según las instrucciones (por lo tanto, 26.x). Intenté cambiar a Docker 27.x para ver si estaba relacionado, pero no cambió nada. Ambas están en la rama estable de Discourse, versión 3.3.2.
Parece que shm_size podría ser el principal culpable:
Aunque no tengo idea de por qué no fue un problema en el servidor anterior y sí lo es en el nuevo. La única otra diferencia importante es que el servidor antiguo usa Ubuntu 22.04 LTS y el nuevo servidor está en 24.04 LTS.
También intenté esto, pero los cambios se sobrescriben cuando el contenedor se inicia de nuevo.
Así que, para dar seguimiento en caso de que alguien más se enfrente a este problema: lo anterior lo resolvió para mí. Ya no necesito editar shm-size en el lanzador.
Esto se encontró después de notar esta advertencia durante la reconstrucción: ADVERTENCIA ¡La sobreasignación de memoria debe estar habilitada! Sin ella, un guardado en segundo plano o la replicación pueden fallar en condiciones de poca memoria. Al estar deshabilitada, también puede causar fallos sin condiciones de poca memoria, ver https://github.com/jemalloc/jemalloc/issues/1328. Para solucionar este problema, agregue 'vm.overcommit_memory = 1' a /etc/sysctl.conf y luego reinicie o ejecute el comando 'sysctl vm.overcommit_memory=1' para que esto tenga efecto.