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.
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.
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 ![]()
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
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.
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.
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).
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.
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.