Consumo eccessivo di memoria dovuto alla precompilazione delle risorse

Ciao @david,

L’utilizzo della memoria diminuisce non appena l’attività assets:build è completata?

No. Ho scavato più a fondo e c’è qualcosa di strano.

Prima di eseguire precompiling:build, ecco l’elenco dei plugin:

/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

Ho notato il seguente comportamento dopo aver eseguito il debug del codice.

/var/www/discourse$ script/rails runner "AssetProcessor.ember_version"
Il nome del plugin è 'msgraph-polling', ma la directory del plugin è denominata 'msgraph-poll-discourse-plugin'

# si blocca qui per sempre

AssetProcessor.ember_version corrisponde alla riga discourse/lib/plugin/js_manager.rb at latest · discourse/discourse · GitHub

Quindi ho apportato alcune modifiche a questo file (allegato), principalmente per stampare dove si blocca durante l’elaborazione e per rimuovere AssetProcessor.ember_version in discourse/lib/plugin/js_manager.rb at latest · discourse/discourse · GitHub, inserendo semplicemente 5 per continuare la generazione dell’hex.

Poi, ho ridotto il parallelismo a 1 per semplificare le cose in discourse/lib/plugin/js_manager.rb at latest · discourse/discourse · GitHub (parallel_count = [Etc.nprocessors, 1].min).

Dopo ciò, ho eseguito bundle exec rake assets:precompile:build, ottenendo il seguente risultato:

/var/www/discourse$ bundle exec rake assets:precompile:build
Il nome del plugin è 'msgraph-polling', ma la directory del plugin è denominata 'msgraph-poll-discourse-plugin'
[assemble_ember_build] Riutilizzo della build core di Ember esistente. Tutto fatto.
Il nome del plugin è 'msgraph-polling', ma la directory del plugin è denominata 'msgraph-poll-discourse-plugin'
[Plugin::JsManager] Compilazione di 49 plugin...
Compilazione di automation...
fine dei file.sort
fine dei file.sort
        hex_digest 103dc9ebebb80a7065cb8dd41fb3356b30f151f7
########### ricorsivo

# si blocca qui per sempre, consumando tutta la memoria

Sospetto che possa essere correlato al valore ulimit (che abbiamo impostato su unlimited invece di qualcosa come ulimit -n 1048576;), dato che si aprono un numero piuttosto elevato di file e se ne memorizza il contenuto in memoria (tramite le chiamate ricorsive).

Fammi sapere se questo ti suona familiare o se hai altri indizi su quale possa essere il problema.

Ciao,

Ismael

js_manager.rb.txt (7.7 KB)