Привет, @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
В ходе отладки кода я заметил следующее поведение:
/var/www/discourse$ script/rails runner "AssetProcessor.ember_version"
Имя плагина — 'msgraph-polling', но имя директории плагина — '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
Имя плагина — 'msgraph-polling', но имя директории плагина — 'msgraph-poll-discourse-plugin'
[assemble_ember_build] Повторное использование существующей сборки core ember. Всё готово.
Имя плагина — 'msgraph-polling', но имя директории плагина — 'msgraph-poll-discourse-plugin'
[Plugin::JsManager] Компиляция 49 плагинов...
Компиляция automation...
конец сортировки файлов
конец сортировки файлов
hex_digest 103dc9ebebb80a7065cb8dd41fb3356b30f151f7
########### рекурсивно
# зависает здесь навсегда, потребляя всю доступную память
У меня есть подозрение, что проблема может быть связана со значением ulimit (которое у нас установлено в unlimited вместо чего-то вроде ulimit -n 1048576;), учитывая, что открывается довольно большое количество файлов, и их содержимое сохраняется в памяти (благодаря рекурсивным вызовам).
Дайте знать, если это вам что-то говорит, или если у вас есть другие идеи относительно возможной причины проблемы.
С уважением,
Исмаэль
js_manager.rb.txt (7.7 KB)