¿Configurar el límite de memoria de ruby?

¿Podría configurarse como una opción de configuración del sitio la cantidad de memoria que puede utilizarse? Actualmente, el ajuste está establecido en 2 GB (Edición: perdón, estaba equivocado, véase más abajo), mientras que antes era de 4 GB; sin embargo, la configuración de hardware recomendada es de 1 GB más memoria de intercambio. En mi opinión, un nodo de 1 GB podría entrar en un frenesí de paginación si el uso de Ruby realmente llegara a 2 GB.

A partir de un registro de actualización:

Migrando por defecto
Sembrando por defecto
*** Empaquetando activos. Esto tomará un tiempo *** 
$ RUBY_GC_MALLOC_LIMIT_MAX=20971520 RUBY_GC_OLDMALLOC_LIMIT_MAX=20971520 RUBY_GC_HEAP_GROWTH_MAX_SLOTS=50000 RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=0.9  bundle exec rake assets:precompile
Limpiando archivos temporales
Empaquetando activos
1 me gusta

No estoy seguro de cuán relevantes son estos ajustes en Ruby moderno, pero @sam lo sabrá mejor.

1 me gusta

Ahem, disculpe, eso no es 2G, son 20 M. Así que nada que ver con la situación que creía. (Edición: ¡es peor! Véase más abajo)

1 me gusta

Prueba con 20G. :wink: :slightly_smiling_face:

1 me gusta

Discourse tiene un uso de memoria predecible, por lo que la opción que necesitas es el número de trabajadores de Unicorn.

Si tienes un servidor de 1 GB, configuraremos por defecto 2 trabajadores, lo que debería funcionar bien con esta baja cantidad de memoria.

2 Me gusta

De hecho, mientras se ejecuta como un foro. ¡Pero esto no es eso!

Durante las actualizaciones, algunas tareas especifican esas variables de entorno para Ruby.

1 me gusta

Sí, durante las actualizaciones establecemos esas variables para que la actualización no falle debido a la presión de memoria en máquinas con especificaciones muy bajas.

2 Me gusta

Bien, y mi observación es que los límites podrían estar establecidos demasiado altos para algunos casos, así que me pregunto si se puede hacer configurable.

2 Me gusta

Probamos este procedimiento muchas veces a lo largo de los años y podemos garantizar que funcionará perfectamente para comunidades pequeñas que utilicen un VPS de 1 GB. Incluso termina trabajadores adicionales de Unicorn para recuperar memoria durante la actualización y ayudar.

Puedes leer el código que proviene de este commit:

Si puedes reproducir el fallo en un droplet de Digital Ocean, estaremos encantados de echar un vistazo.

Si eso es indispensable, puedes bifurcar el plugin y ajustarlo a tus necesidades.

4 Me gusta

Gracias, ahora estoy obteniendo una imagen. (Dos puntos muy importantes: estas configuraciones de GC están ajustadas específicamente para actualizaciones, y las unidades son bytes, por lo que el límite está establecido actualmente en 20 MB. Hay detalles útiles e interesantes en este hilo anterior [enlace de archivo porque no está disponible para mí ahora].)

2 Me gusta

¿Deberíamos restaurar ese tema, @sam? ¿Tiene valor histórico o está obsoleto?

1 me gusta

Ciertamente está desactualizado; la última versión de Ruby tiene múltiples límites de malloc. Es un tema interesante con cierto valor histórico, pero necesitaría un gran cartel de “Desactualizado” en la parte superior.

Nuestra actualización ya está funcionando al máximo de su capacidad; lo mejor que podemos hacer además de esto es reducir la disponibilidad. Si la memoria está muy limitada, tendrás que asumir interrupciones durante la actualización.

5 Me gusta