¿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
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.
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.
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.
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].)
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.