Consumo excesivo de memoria debido a la precompilación de activos

Hola @david,

¿El uso de memoria disminuye tan pronto como termina la tarea assets:build?

No. Investigué más a fondo y hay algo extraño.

Antes de ejecutar precompiling:build, esta es la lista de plugins:

/var/www/discourse$ ls plugins/
automation           discourse-akismet           discourse-data-explorer  discourse-hcaptcha           discourse-microsoft-auth  discourse-post-voting  discourse-saved-searches       discourse-user-notes           styleguide
chat                 discourse-apple-auth        discourse-details        discourse-lazy-videos        discourse-narrative-bot   discourse-presence     discourse-solved               discourse-zendesk-plugin
checklist            discourse-assign            discourse-docs           discourse-local-dates        discourse-oauth2-basic    discourse-prometheus   discourse-subscriptions        footnote
discourse-adplugin   discourse-cakeday           discourse-gamification   discourse-login-with-amazon  discourse-openid-connect  discourse-reactions    discourse-templates            msgraph-poll-discourse-plugin
discourse-affiliate  discourse-calendar          discourse-github         discourse-lti                discourse-patreon         discourse-rewind       discourse-topic-trade-buttons  poll
discourse-ai         discourse-chat-integration  discourse-graphviz       discourse-math               discourse-policy          discourse-rss-polling  discourse-topic-voting         spoiler-alert

He notado el siguiente comportamiento después de depurar el código.

/var/www/discourse$ script/rails runner "AssetProcessor.ember_version"
Plugin name is 'msgraph-polling', but plugin directory is named 'msgraph-poll-discourse-plugin'

# se cuelga aquí para siempre

AssetProcessor.ember_version corresponde a la línea discourse/lib/plugin/js_manager.rb at latest · discourse/discourse · GitHub.

Así que hice algunas modificaciones en este archivo (adjunto), básicamente para imprimir dónde se queda atascado mientras procesa, y para eliminar AssetProcessor.ember_version en discourse/lib/plugin/js_manager.rb at latest · discourse/discourse · GitHub, simplemente poniendo 5 para continuar con la generación del hash hexadecimal.

Luego, reduje el paralelismo a 1 para facilitar las cosas en discourse/lib/plugin/js_manager.rb at latest · discourse/discourse · GitHub (parallel_count = [Etc.nprocessors, 1].min).

Después de esto, ejecuté bundle exec rake assets:precompile:build, obteniendo el siguiente resultado:

/var/www/discourse$ bundle exec rake assets:precompile:build
Plugin name is 'msgraph-polling', but plugin directory is named 'msgraph-poll-discourse-plugin'
[assemble_ember_build] Reutilizando la compilación central de Ember existente. Todo listo.
Plugin name is 'msgraph-polling', but plugin directory is named 'msgraph-poll-discourse-plugin'
[Plugin::JsManager] Compilando 49 plugins...
Compilando automation...
fin de files.sort
fin de files.sort
        hex_digest 103dc9ebebb80a7065cb8dd41fb3356b30f151f7
########### recursivo

# se cuelga aquí para siempre, consumiendo toda la memoria

Sospecho que esto puede estar relacionado con el valor de ulimit (que tenemos configurado como unlimited en lugar de algo como ulimit -n 1048576;), dado que se abren un número considerable de archivos y se almacena su contenido en memoria (mediante las llamadas recursivas).

Avísame si esto te suena familiar o si tienes alguna otra pista sobre cuál podría ser el problema.

Saludos,

Ismael

js_manager.rb.txt (7.7 KB)