استهلاك مفرط للذاكرة بسبب تجميع الأصول مسبقًا

مرحبًا @david ،

هل ينخفض استخدام الذاكرة فورًا بعد انتهاء مهمة assets:build؟

لا. لقد بحثت أكثر ووجدت شيئًا غريبًا.

قبل تشغيل precompiling:build، كانت قائمة الإضافات كالتالي:

/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

لاحظت السلوك التالي بعد تصحيح الكود (debugging):

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

# يتوقف هنا إلى الأبد

يتوافق AssetProcessor.ember_version مع السطر discourse/lib/plugin/js_manager.rb at latest · discourse/discourse · GitHub

لذلك قمت ببعض التعديلات على هذا الملف (مرفق)، بهدف طباعة المكان الذي يتعطل فيه أثناء المعالجة، وإزالة استدعاء AssetProcessor.ember_version في discourse/lib/plugin/js_manager.rb at latest · discourse/discourse · GitHub واستبداله بالرقم 5 لمواصلة توليد الـ hex.

ثم قمت بتقليل التوازي إلى 1 لتبسيط الأمور في discourse/lib/plugin/js_manager.rb at latest · discourse/discourse · GitHub (parallel_count = [Etc.nprocessors, 1].min).

بعد ذلك، نفذت الأمر bundle exec rake assets:precompile:build، وكانت النتيجة كالتالي:

/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

# يتوقف هنا إلى الأبد، مستهلكًا الذاكرة بالكامل

أشتبه في أن المشكلة قد تكون مرتبطة بقيمة ulimit (التي قمنا بضبطها على unlimited بدلاً من قيمة مثل ulimit -n 1048576;)، نظرًا لأنك تفتح عددًا كبيرًا من الملفات وتخزن محتواها في الذاكرة (عبر الاستدعاءات العودية).

أخبرني إذا كان هذا يذكرك بشيء، أو إذا كانت لديك أي تلميح آخر حول ما قد تكون المشكلة.

تحياتي،

إسماعيل

js_manager.rb.txt (7.7 KB)