¿Podría alguien proporcionar instrucciones para configurar la asignación de memoria?
Dadas las esporádicas mensajes del kernel de “memoria insuficiente”/volcado, el aumento del 3x en el intercambio (swapping) y la degradación progresiva de la respuesta de la aplicación, parece que nuestra aplicación a veces se queda sin memoria. Nuestro sistema tiene actualmente 8 GB de memoria y 2 GB de intercambio. Detalles a continuación.
He revisado las instrucciones para agregar más memoria física e intercambio en ("Cannot allocate memory" when upgrading), pero no he podido encontrar detalles sobre cómo asignarla.
En cuanto a las configuraciones de memoria, estamos utilizando todos los valores predeterminados. El sistema se recupera después de unos minutos, pero con un mayor uso, creemos que es momento de informarnos sobre cómo mejorar el rendimiento. Sin embargo, no estoy seguro de dónde y cómo configurar esto. ¿Aumentar la memoria asignada para la instancia de Docker o para la cantidad de Unicorn de Ruby (o ambas)?
Soy administrador de sistemas sin experiencia en Ruby y con experiencia limitada en Docker, por lo que indicarme la dirección del archivo de configuración y la sintaxis a utilizar sería de gran ayuda.
¿Volviste a ejecutar discourse-setup después de aumentar tu RAM? Ajustará la configuración de memoria en consecuencia. También puedes leer los comentarios en app.yml y modificarlos.
Hola Rafael y equipo, mi nombre es Serge y trabajo con el Sr. Happy Lee, quien acaba de partir a unas tan esperadas vacaciones, así que yo me encargaré de este problema.
Para complementar la descripción: El servidor se construyó originalmente con 8 GB de RAM y 2 GB de espacio de intercambio. No lo hemos actualizado desde entonces.
En el registro del sistema puedo ver evidencia de que Ruby es el proceso que consume toda la memoria y está causando la falta de memoria del kernel (OoM):
Proceso 2960 (ruby) terminado, total-vm:10031472kB, anon-rss:7438148kB, file-rss:0kB
No soy experto en Ruby, por lo que no estoy seguro de cómo identificar qué proceso dentro de Ruby está consumiendo tanta memoria.
el plugin fue financiado para su desarrollo por nuestra organización, por lo que, lamentablemente, no tengo permiso para exponer el código fuente aquí. Además, dado que el plugin funciona sin problemas en otras instancias, esto me hace pensar en aumentar los recursos de memoria del servidor para esta en particular. La máquina es una VM, así que puedo duplicar fácilmente la cantidad de memoria y ver si esto lo soluciona.
No podemos hacer mucho para depurar código que no podemos ver desde nuestro lado. Podrías configurar el plugin exportador de Prometheus para Discourse para seguir las métricas de tu instancia.
¿Las otras instancias también están ejecutando Ruby 2.3.1-2~ubuntu16.04.14?
Quizás no sea relevante, pero:
así que esto fue claramente un error de Ruby. Probamos en varias versiones de Ruby y determinamos que solo las versiones 2.3.x y 2.4.x presentaban la fuga (aparentemente esto se corrigió en Ruby 2.5.0****).
Hola Benjamin, las otras instancias también están ejecutando Ruby 2.3.1-2~ubuntu16.04.14. Voy a probar una actualización para ver si no rompe nuestra configuración de Docker.