Fallo al actualizar la instancia de discourse al 15 de febrero de 2022

No puedo reiniciar ahora mismo, informaré cuando tenga la oportunidad de hacerlo. Tardará al menos unos días.

¿Debería alarmarme? Está bien si tengo que asignar más recursos.

Sí, deberías alarmarte.
Apenas te queda margen y tampoco hay casi espacio para el almacenamiento en caché del disco.

Pero antes de asignar más recursos, deberías intentar averiguar qué está causando este uso de memoria bastante extraordinario.

1 me gusta

No puedo hacer mucho ahora mismo, estoy en movimiento. Volveré a ello este fin de semana y definitivamente intentaré averiguar qué está pasando. Gracias por la indicación :+1:

3 Me gusta

Parece que solo fue un reinicio pendiente lo que estaba causando esto. Logré reiniciar el servidor y los números se ven mucho, mucho mejor a partir de ahora

root@discourse:~# free
               total        used        free      shared  buff/cache   available
Mem:         3927308      977624     2246208       42880      703476     2646836
Swap:        2097148           0     2097148
2 Me gusta

Podría ser útil, si te encuentras en una situación similar de nuevo, preguntar a discourse qué procesos están utilizando memoria. La salida en https://example.com/admin/upgrade#/processes está ordenada por uso de RAM. Creo que solo mostrará los procesos que se ejecutan con el contenedor. En la línea de comandos, podrías usar

ps aux | sort -nr -k 4 | head -22

o algo similar, para ver el uso de todos los procesos, incluidos los de todos los contenedores.

Si un reinicio soluciona un problema de falta de memoria, es muy probable que tengas algún tipo de proceso descontrolado en algún lugar que aumentará (quizás lentamente) hasta causar problemas.

Editar: Hmm, veo que menciono leer los procesos según el uso de RAM (RSS). Eso puede ser útil, pero en este caso, en realidad estamos más interesados en el uso de memoria virtual: deberíamos ordenar por la columna VSZ, columna 5, para eso.

2 Me gusta

Esta instancia de Discourse se configuró por primera vez hace muchos años, así que quizás antes de que se realizara la comprobación del archivo swap. He aplicado manualmente esas líneas de código y ahora se ha creado el archivo swap. Gracias.

Para que Docker utilice el archivo swap, ¿necesito aplicar esto? O, mejor dicho, ¿cuál es el propósito de esta recomendación?

Encontré esto que discute qué es vm.overcommit_memory, pero no entiendo por qué se necesita algún cambio de este tipo:

Esto tiene que ver con la ejecución de Redis, no con la actualización de Discourse.

Creo que es más que eso; déjame intentar explicar. La recomendación proviene de Redis, y Redis la recomienda porque bifurcar un proceso exige mucha memoria virtual, y Redis se bifurca para realizar guardados en segundo plano, y sin embargo, la memoria virtual reclamada nunca será necesaria.

Esto es típico de muchas aplicaciones Unix: se bifurcan, pero no necesitarán duplicar su uso de memoria. Dado que es típico para muchas, y dado que esta es una configuración del kernel que cambia el comportamiento de todos los procesos en todos los contenedores, bien podría convertir un fallo en un éxito cuando la memoria virtual está bajo presión.

En las instancias pequeñas y baratas que muchos de nosotros usamos, la memoria virtual a menudo está bajo presión. Y especialmente durante las actualizaciones o reconstrucciones.

Por lo tanto, cambiar esta configuración podría estar relacionado con el éxito o el fracaso de una actualización, especialmente si recientemente ha habido un cambio que aumenta la demanda de memoria virtual.

Tal como está configurado, el kernel rechazará las asignaciones que no pueda satisfacer. Con este ajuste, aceptará esas asignaciones, y el fallo podría evitarse, o podría ocurrir más tarde cuando la asignación se convierta en uso.

Si su total de RAM y swap es lo suficientemente grande, nunca necesitará cambiar esta configuración. Si su total no es grande, cambiarla podría ayudar.

2 Me gusta

El comando free te dirá cuánta paginación está configurada y cuánta de ella se está utilizando. Creo que encontrarás que se está utilizando tan pronto como ejecutaste esos comandos.

Es para aumentar la cantidad de memoria virtual disponible. (Es decir, la suma de RAM y paginación). Si te quedas sin RAM, empiezas a tener problemas de rendimiento. Pero si te quedas sin memoria virtual, los procesos fallarán al iniciarse o morirán o serán eliminados. Se vuelve brutal.

Aquellos de nosotros con poca RAM y poco disco puede que no seamos libres de añadir mucha paginación, pero 2G parece ser un buen mínimo. (Si tuvieras 16G de RAM, puede que no necesitaras ninguna paginación, pero esa es otra historia. Es la suma de las dos lo que importa, cuando el problema es que las cosas fallan).

2 Me gusta

Ajá. Creo que lo he entendido más o menos, pero es una muy buena explicación. Por eso lo he estado configurando en cada instalación que he hecho VM que he creado para los clientes.

Me pregunto si deberíamos hacer que discourse-setup cambie estas configuraciones cuando crea el swap.

1 me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.