Проблема с обновлением [error 137]

Для стандартной установки на сайте в логе ошибок при последнем обновлении указано следующее:


********************************************************
*** Пожалуйста, будьте терпеливы, следующие шаги могут занять время ***
********************************************************
Перезапуск Unicorn для освобождения памяти
Перезапуск Unicorn pid: 545
Ожидание перезагрузки Unicorn.
Ожидание перезагрузки Unicorn..
Ожидание перезагрузки Unicorn...
Ожидание перезагрузки Unicorn....
Ожидание перезагрузки Unicorn.....
Ожидание перезагрузки Unicorn......
Ожидание перезагрузки Unicorn.......
Ожидание перезагрузки Unicorn........
Ожидание перезагрузки Unicorn.........
Ожидание перезагрузки Unicorn..........
Ожидание перезагрузки Unicorn...........
Ожидание перезагрузки Unicorn............
Ожидание перезагрузки Unicorn.............
Ожидание перезагрузки Unicorn..............
Ожидание перезагрузки Unicorn...............
Ожидание перезагрузки Unicorn................
Ожидание перезагрузки Unicorn.................
Ожидание перезагрузки Unicorn..................
Ожидание перезагрузки Unicorn...........
Ожидание перезагрузки Unicorn............
Ожидание перезагрузки Unicorn.....
Ожидание перезагрузки Unicorn......
Ожидание перезагрузки Unicorn.......
Ожидание перезагрузки Unicorn........
Ожидание перезагрузки Unicorn.........
Ожидание перезагрузки Unicorn..........
Ожидание перезагрузки Unicorn...........
Ожидание перезагрузки Unicorn............
Ожидание перезагрузки Unicorn.............
Ожидание перезагрузки Unicorn..............
Ожидание перезагрузки Unicorn...............
Используется libv8-node 18.16.0.0 (x86_64-linux)
Используется method_source 1.0.0
Используется thor 1.3.0
Используется zeitwerk 2.6.12
Используется railties 7.0.7
Используется request_store 1.5.1
Используется lograge 0.14.0
Используется logstash-event 1.2.02
Используется logstash-logger 0.26.1
Используется logster 2.13.1
Используется lru_redux 1.1.0
Используется lz4-ruby 0.3.3
Используется maxminddb 0.1.22
Используется memory_profiler 1.0.1
Используется message_bus 4.3.8
Используется mini_racer 0.8.0
Используется redis 4.8.1
Используется sidekiq 6.5.12
Используется mini_scheduler 0.16.0
Используется mini_sql 1.5.0
Используется mini_suffix 0.3.3
Используется multi_json 1.15.0
Используется multi_xml 0.6.0
Используется mustache 1.1.1
Используется uri 0.13.0
Используется net-http 0.4.0
Используется nio4r 2.7.0
Используется version_gem 1.1.3
Используется oauth-tty 1.0.5
Используется snaky_hash 2.0.1
Используется oauth 1.1.0
Используется oauth2 1.4.11
Используется oj 3.16.3
Используется omniauth 1.9.2
Используется omniauth-oauth2 1.7.3
Используется omniauth-facebook 9.0.0
Используется omniauth-github 1.4.0
Используется omniauth-google-oauth2 0.8.2
Используется omniauth-oauth 1.2.0
Используется omniauth-twitter 1.4.0
Используется optimist 3.1.0
Используется pg 1.5.4
Используется pry 0.14.2
Используется pry-byebug 3.10.1
Используется pry-rails 0.3.9
Используется puma 6.4.0
Используется rack-mini-profiler 3.3.0
Используется rack-protection 3.1.0
Используется rails_failover 2.0.1
Используется rails_multisite 5.0.0
Используется raindrops 0.20.1
Используется rbtrace 0.5.1
Используется rchardet 1.8.0
Используется redis-namespace 1.11.0
Используется rexml 3.2.6
Используется rinku 2.0.6
Используется rotp 6.3.0
Используется rqrcode_core 1.2.0
Используется rqrcode 2.2.0
Используется rss 0.3.0
Используется rtlcss 0.2.1
Используется ruby-readability 0.7.0
Используется rubyzip 2.3.2
Используется sanitize 6.1.0
Используется sass-embedded 1.69.5 (x86_64-linux-gnu)
Используется sassc-embedded 1.68.6
Используется sprockets 3.7.2 из https://github.com/rails/sprockets (at 3.x@f4d3dae)
Используется sprockets-rails 3.4.2
Используется sshkey 3.0.0
Используется stackprof 0.2.25
Используется tzinfo-data 1.2023.4
Используется uglifier 4.2.0
Используется unicorn 6.1.0
Используется web-push 3.0.1
Бандл завершен! 138 зависимостей из Gemfile, сейчас установлено 171 gem.
Gems в группах 'development' и 'test' не были установлены.
Установленные бандл-гемы находятся в `./vendor/bundle`
1 установленный gem, от которого вы напрямую зависите, ищет финансирование.
Запустите `bundle fund` для получения подробностей
$ yarn install
yarn install v1.22.19
[1/5] Проверка package.json...
[2/5] Разрешение зависимостей...
Успешно. Уже актуально.
$ yarn --cwd app/assets/javascripts $(node -e 'const argv = JSON.parse(process.env.npm_config_argv).original; const passthrough = [`--frozen-lockfile`, `-s`].filter(arg => argv.includes(arg)); console.log(passthrough.join(` `));')
yarn install v1.22.19
[1/4] Разрешение зависимостей...
Предупреждение: поле разрешения "unset-value@2.0.1" несовместимо с запрошенной версией "unset-value@^1.0.0"
Успешно. Уже актуально.
$ ./run-patch-package
patch-package 8.0.0
Применение патчей...
babel-plugin-debug-macros@0.3.4 ✔
content-tag@1.2.2 ✔
ember-cli@5.0.0 ✔
ember-this-fallback@0.4.0 (1 deprecation-name) ✔
ember-this-fallback@0.4.0 (2 themes) ✔
virtual-dom@2.1.1 ✔
Готово за 4.79 с.
Готово за 7.25 с.
$ LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all
docker_manager уже находится в последней совместимой версии
$ SKIP_POST_DEPLOYMENT_MIGRATIONS=1 bundle exec rake multisite:migrate
Мигратор для мультисайтов работает с использованием 1 потока

Миграция default
Заполнение данными default
*** Сборка ассетов. Это займет время *** 
$ bundle exec rake themes:update assets:precompile
Проверка 'Air Theme' для 'default'... обновление с b9d44745 до 85dc24d6
Проверка 'Modern Category + Group Boxes' для 'default'... актуально
Проверка 'Discourse Clickable Topic' для 'default'... актуально
Проверка 'discourse-search-banner' для 'default'... обновление с 934e0d35 до 6ba0e9d0
Лимит heap_size_limit для Node.js (488.25) меньше 2048 МБ. Установка --max-old-space-size=2048.
yarn run v1.22.19
$ /var/www/discourse/app/assets/javascripts/node_modules/.bin/ember build
Сборка
Окружение: development
ПРЕДУПРЕЖДЕНИЕ: ember-test-selectors: используется неподдерживаемая версия ember-cli-babel. Свойства data-test автоматически не удаляются из вашего JS-кода.
Сборка...
...[ConfigLoader]
...[Babel: @embroider/macros > applyPatches]
...[Babel: discourse-widget-hbs > applyPatches]
...[Babel: ember-source > applyPatches]
...[ember.js]
...[Babel: discourse-common > applyPatches]
...[Babel: truth-helpers > applyPatches]
...[Babel: ember-tracked-storage-polyfill > applyPatches]
...[Babel: @ember/legacy-built-in-components > applyPatches]
...[Babel: @ember/render-modifiers > applyPatches]
...[Babel: @ember/test-helpers > applyPatches]
...[Babel: @ember/test-waiters > applyPatches]
...[Babel: @embroider/util > applyPatches]
...[Babel: @glimmer/component > applyPatches]
...[Babel: dialog-holder > applyPatches]
...[Babel: ember-this-fallback > applyPatches]
...[Babel: ember-buffered-proxy > applyPatches]
...[Babel: ember-cached-decorator-polyfill > applyPatches]
...[Babel: ember-exam > applyPatches]
...[Babel: ember-functions-as-helper-polyfill > applyPatches]
...[Babel: ember-load-initializers > applyPatches]
...[Babel: ember-on-resize-modifier > applyPatches]
...[Babel: ember-resize-observer-service > applyPatches]
...[Babel: ember-router-service-refresh-polyfill > applyPatches]
...[Babel: float-kit > applyPatches]
...[Babel: select-kit > applyPatches]
...[@embroider/compat/app]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
Убито
Ошибка: команда завершилась с кодом выхода 137.
Для получения документации посетите https://yarnpkg.com/en/docs/cli/run
Docker Manager: НЕ УДАЛОСЬ ОБНОВИТЬ
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:210:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:111:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in <main>'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `<main>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.7/lib/rails/commands/runner/runner_command.rb:43:in `load'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.7/lib/rails/commands/runner/runner_command.rb:43:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.0/lib/thor/command.rb:28:in `run'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.0/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.0/lib/thor.rb:527:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.7/lib/rails/command/base.rb:87:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.7/lib/rails/command.rb:48:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.7/lib/rails/commands.rb:18:in `<main>'
<internal:/usr/local/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
<internal:/usr/local/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bootsnap-1.17.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
bin/rails:18:in `<main>'
Запуск 1 остановленного ранее воркера Unicorn

Похоже, процесс обновления все еще выполняется. Неясно, является ли это серьезной проблемой и что можно сделать в данном случае.

Недостаточно памяти.

Вам нужно добавить swap или оперативную память.

Но также можно попробовать снова, возможно, это сработает.

Если вы обновляетесь через UX, попробуйте выполнить пересборку через командную строку.

Столкнулся с той же проблемой при 1 ГБ ОЗУ и 2 ГБ swap (обновление через веб-интерфейс). Увеличил swap до 3 ГБ, пока что кажется, что на этот раз всё сработает (обновление через CLI).

Спасибо, да, это сервер с 1 ГБ оперативной памяти, похоже, этого уже недостаточно для Discourse — для нормальной работы требуется 2 ГБ. Обновление может установиться после перезагрузки, посмотрим, завершится ли оно.

Нет, снова не вышло. Это было из UX, попробую командную строку следующим шагом.

Сколько у вас оперативной памяти и файла подкачки?

free -h

По моему опыту, для онлайн-обновлений сейчас требуется минимум 4 ГБ (хотя иногда хватает и 3…)

Показывает 952 МБ памяти и 2,0 ГБ подкачки. Не знаю, что такое подкачка?

Обновления, похоже, успешно выполнены через командную строку apt upgrade

Ты имеешь в виду, что для запуска обновлений через графический интерфейс в идеале нужно 4 ГБ памяти, чтобы это работало?

Не понимаю, почему это занимает больше памяти, чем командная строка.

У меня есть два стандартных установленных сайта на DigitalOcean. Общая стоимость за оба составляет 16,32 доллара в месяц. Это намного меньше, чем платить 100 долларов в месяц за один стандартный размещённый сайт, но пока что не было ни одной регистрации. Поэтому это пустая трата, если люди не захотят присоединиться — возможно, я закрою эти сайты.

Похоже, это неверно. Что именно вы пытаетесь сделать?

В консоли, войдя как root, я ввожу команду “apt upgrade”, и это запускает установку обновления.

Благодарю @Arkshine за упоминание об этом здесь:

Не знаю, что означает “Apt”, но, похоже, это необходимо для работы.

Просто уточню: вы полагаете, что речь идет об обновлении вашего Discourse или вашего сервера?

Я думал, что обновлял Discourse, но, возможно, обновлялся сервер Ubuntu. Не уверен.

Думаю, вам будет полезно прочитать ещё несколько тем по этой теме. Если вы поищете в Documentation или просто выполните общий поиск, то,我相信, вы найдёте много информации, которая поможет восполнить пробелы в ваших знаниях. Существует значительное количество советов, охватывающих основы, из которых вы можете почерпнуть полезные сведения. :+1:

Хорошо, тут многому предстоит научиться.

Упустил, что вы написали, что пересборка может обновить приложение.

Вот официальное руководство:

Потому что одновременный запуск сайта (хоть и с меньшим количеством «Единорогов») и выполнение сборки потребляют много памяти?

Я проверил это на своём сервере (3 vCPU, 4 ГБ):

В онлайн-режиме:

2,21 до обновления → 1,7 после, так как освобождается память → пик 3,5 ГБ во время сборки.

Также увеличилось использование подкачки (swap) примерно на 200 МБ, достигнув пика около 800 МБ.

В командной строке (сравнение не совсем корректно, так как измерения проводились сразу после предыдущих):

1,7 до обновления → падение до ~250 МБ! → постепенный рост до пика 3,25 ГБ во время компиляции ассетов, но в целом использование памяти значительно ниже.

Использование подкачки было очень низким на протяжении почти всего процесса.

Оговорка: все показатели наблюдались в htop, поэтому они могут быть неточными; лучше всего построить график.

Меня удивило, насколько «пиковыми» были офлайн-сборки. Предварительная компиляция ассетов действительно требует много памяти — возможно, тем больше, чем больше vCPU, так как часть работы может выполняться параллельно?

Также меня удивило, что разница в пиковом использовании памяти в моём случае была невелика, хотя использование подкачки было значительно ниже, а в целом потребление памяти при офлайн-сборке было намного ниже: на протяжении 95% процесса оно оставалось в пределах сотен мегабайт, тогда как при онлайн-обновлении минимум составлял 1,7 ГБ.

Похоже, всё верно, вопросительный знак здесь не нужен!

Так что пересборка приложения автоматически обновляет его до последней версии, правильно?

Существует ли поддерживаемый или неподдерживаемый способ сохранить работающие предыдущие версии Discourse, или для старых версий требуются новые установки?

Нет, но вы можете замедлить процесс, переключившись на stable.

К сожалению, в этот раз вы уже опоздали, так как вернуться назад нельзя.

Хорошо, возможно, стоит переключиться на настройку стабильности, чтобы получать только проверенные стабильные обновления, а не разработческие или бета-версии. Ищу способ, как это сделать.