No se pueden aumentar db_shared_buffers (0,1% de la RAM total) y db_work_mem (0,03% de la RAM total)

Esto es un poco desconcertante :upside_down_face:

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.

shm_size parece estar codificado en el lanzador:

¡Cualquier información o ayuda sería apreciada! :meow_heart:

Se refiere al espacio en el disco duro, no a la memoria RAM.

1 me gusta

Gracias @pfaffman. Yo también lo pensé al principio, pero luego leí este hilo:

También hay mucho espacio libre :confused:

1 me gusta

Una solución rápida con cinta adhesiva es simplemente editar el archivo del lanzador así:

cd /var/discourse
vi launcher

Luego, reemplace las 3 ocurrencias de
--shm-size=512m
con la cantidad de RAM deseada (yo elegí el 50% de la RAM del sistema).

Luego, reconstruya. Deberá editarlo nuevamente cada vez que se actualice el lanzador.

Parece que está funcionando por el momento.

water leaking fix with flex tape

1 me gusta

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.

2 Me gusta