Übermäßiger Speicherverbrauch durch Vorkompilieren von Assets

Hallo @david,

Nimmt der Speicherverbrauch sofort ab, sobald die Aufgabe assets:build abgeschlossen ist?

Nein. Ich habe weiter recherchiert und es gibt etwas Seltsames.

Vor dem Ausführen von precompiling:build sieht die Liste der Plugins so aus:

/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

Beim Debuggen des Codes habe ich folgendes Verhalten festgestellt:

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

# hangs here forever

Die Zeile AssetProcessor.ember_version entspricht discourse/lib/plugin/js_manager.rb at latest · discourse/discourse · GitHub.

Daher habe ich einige Änderungen an dieser Datei vorgenommen (siehe Anhang), hauptsächlich um auszugeben, wo der Prozess beim Verarbeiten hängen bleibt, und um AssetProcessor.ember_version in discourse/lib/plugin/js_manager.rb at latest · discourse/discourse · GitHub zu entfernen, indem ich einfach 5 einsetze, um die Hex-Generierung fortzusetzen.

Anschließend habe ich die Parallelität auf 1 reduziert, um die Dinge zu vereinfachen, in discourse/lib/plugin/js_manager.rb at latest · discourse/discourse · GitHub (parallel_count = [Etc.nprocessors, 1].min).

Danach habe ich bundle exec rake assets:precompile:build ausgeführt, was folgendes Ergebnis lieferte:

/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] Reusing existing core ember build. All done.
Plugin name is 'msgraph-polling', but plugin directory is named 'msgraph-poll-discourse-plugin'
[Plugin::JsManager] Compiling 49 plugins...
Compiling automation...
end of files.sort
end of files.sort
        hex_digest 103dc9ebebb80a7065cb8dd41fb3356b30f151f7
########### recursive

# hang here forever, consuming the full memory

Ich vermute, dass dies mit dem Wert von ulimit zusammenhängen könnte (der bei uns auf unlimited statt auf etwas wie ulimit -n 1048576; gesetzt ist), da eine sehr große Anzahl von Dateien geöffnet und deren Inhalt im Speicher gespeichert wird (durch rekursive Aufrufe).

Lass mich wissen, ob dir das etwas sagt oder ob du weitere Hinweise hast, woran das Problem liegen könnte.

Viele Grüße,

Ismael

js_manager.rb.txt (7,7 KB)