업그레이드 문제 [오류 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이 다시 로드될 때까지 대기 중.......................
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 사용 중
https://github.com/rails/sprockets (at 3.x@f4d3dae)에서 sprockets 3.7.2 사용 중
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 사용 중
Bundle 완료! 138개 Gemfile 종속성, 171개 gems 설치됨.
'development' 및 'test' 그룹의 gems는 설치되지 않았습니다.
Bundled gems는 `./vendor/bundle`에 설치됩니다.
직접 의존하는 설치된 gem 중 1개가 자금 조달을 찾고 있습니다.
  자세한 내용은 `bundle fund`를 실행하세요
$ yarn install
yarn install v1.22.19
[1/5] package.json 검증 중...
[2/5] 패키지 해결 중...
success 이미 최신 상태입니다.
$ 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] 패키지 해결 중...
warning Resolution 필드 "unset-value@2.0.1"은 요청된 버전 "unset-value@^1.0.0"과 호환되지 않습니다
success 이미 최신 상태입니다.
$ ./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
Multisite migrator가 1개 스레드를 사용하여 실행 중

default 마이그레이션 중
default 시딩 중
*** 애셋 번들링 중. 시간이 좀 걸릴 수 있습니다 *** 
$ bundle exec rake themes:update assets:precompile
'default'의 'Air Theme' 확인 중... b9d44745에서 85dc24d6로 업데이트
'default'의 'Modern Category + Group Boxes' 확인 중... 최신 상태
'default'의 'Discourse Clickable Topic' 확인 중... 최신 상태
'default'의 'discourse-search-banner' 확인 중... 934e0d35에서 6ba0e9d0로 업데이트
Node.js heap_size_limit (488.25)이 2048MB보다 작습니다. --max-old-space-size=2048로 설정합니다.
yarn run v1.22.19
$ /var/www/discourse/app/assets/javascripts/node_modules/.bin/ember build
빌드 중
Environment: development
WARNING: 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]
Killed
error Command failed with exit code 137.
info 이 명령에 대한 문서화는 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 워커를 시작하는 중

업그레이드를 처리하는 것으로 여전히 작동하는 것 같습니다. 이것이 심각한 문제인지, 아니면 이 문제에 대해 무엇을 할 수 있는지 확실하지 않습니다.

메모리 부족입니다.

스왑이나 RAM을 추가해야 합니다.

다만, 다시 시도하면 작동할 수도 있습니다.

UX를 통해 업데이트 중이라면 커맨드 라인으로 재빌드(rebuild)를 시도해 보세요.

RAM 1GB와 스왑 2GB 환경에서 웹 인터페이스를 통해 업그레이드할 때 동일한 문제를 겪었습니다. 스왑을 3GB로 늘렸는데, 이번에는 CLI를 통해 업그레이드 중이라 잘 진행될 것 같습니다.

감사합니다. 네, 이건 1GB 메모리 서버인 것 같고, 더 이상 Discourse에 이상적이지 않은 것 같습니다. 제대로 작동하려면 2GB가 필요합니다. 재시작 후 업데이트 설치가 이제 제대로 진행되고 있을지, 완료되는지 확인해 보겠습니다.

아니요, 또 실패했습니다. 이번에는 UX에서 시도해 본 것이니, 다음에는 명령줄을 사용해 보겠습니다.

RAM과 스왑 용량이 얼마나 되나요?

free -h

제 경험상 요즘 온라인 업데이트에는 최소 4GB가 필요합니다 (3GB로 넘어갈 수도 있지만 …).

메모리 952 Mi, 스왑 2.0 Gi라고 표시되어 있습니다. 스왑이 뭔지 모르겠어요.

명령줄에서 apt upgrade를 실행했을 때 업그레이드는 정상적으로 작동한 것 같습니다.

그렇다면 UX를 통해 업데이트를 실행하려면, 제대로 작동하려면 이상적으로 4GB의 메모리가 필요하다는 뜻인가요?

왜 커맨드라인보다 더 많은 메모리를 차지하는지 모르겠네요.

디지털 오션에 표준 설치 사이트 두 개를 운영하고 있는데, 이 두 개를 합치면 월 $16.32입니다. 표준 호스팅 사이트 하나에 월 $100을 내는 것보다 훨씬 저렴하지만, 아직 가입자가 없어서 사람들이 가입하지 않는 한 이 비용은 낭비입니다. 그래서 이 사이트들을 닫을 수도 있습니다.

이것은 정확하지 않은 것 같습니다. 무엇을 하려 하시는 건가요?

root로 로그인한 콘솔에서 “apt upgrade” 명령어를 입력하면 업그레이드 설치가 시작됩니다.

@Arkshine님이 여기에 이 내용을 언급해 주셔서 감사합니다:

"Apt"가 정확히 무엇을 의미하는지는 모르겠지만, 이 작업을 수행하려면 필수적인 것 같습니다.

확인 차问一下, Discourse를 업그레이드하는 건지, 서버를 업그레이드하는 건지 그렇게 생각하고 계신 건가요?

음, 내가 discourse를 업그레이드한 줄 알았는데, 어쩌면 업그레이드된 건 discourse가 아니라 Ubuntu 서버였을 수도 있겠네요. 확신은 없어요.

해당 주제에 대한 다른 토픽들을 좀 더 읽어보시면 도움이 될 것 같습니다. Documentation 채널에서 검색을 하든, 일반적인 검색을 하든, 지식을 채우는 데 도움이 될 충분한 정보를 찾으실 수 있을 겁니다. 기초를 다루는 조언도 상당히 많으니 참고하시면 좋겠습니다. :+1:

음, 이걸 배우려면 배울 게 많겠네요.

rebuild로 앱을 재빌드할 수 있다는 것을 놓쳤네요.

공식 가이드는 다음과 같습니다:

웹사이트 실행(유니콘 개수는 줄었지만)과 빌드 수행을 동시에 진행하면 메모리 비용이 많이 들기 때문일까요?

저희 서버(3 VCPU, 4GB)에서 직접 테스트해 보았습니다:

온라인 상태:

업그레이드 전 2.21 → 메모리가 해제되면서 1.7 → 빌드 중 3.5 피크 (GB 단위)

스왑 사용량도 약 200MB 증가하여 최대 약 800MB까지 올랐습니다.

명령줄 (위 테스트 직후 실행했으므로 직접 비교는 불가)

업그레이드 전 1.7 → 약 250MB로 하락! → 에셋 컴파일 중 3.25까지 계속 상승하여 피크를 기록하지만, 전반적으로 훨씬 낮았습니다.

거의 전체 과정 동안 스왑 사용량은 매우 낮았습니다.

참고: 모든 수치는 htop에서 관찰한 것이므로 부정확할 수 있으며, 그래프로 시각화하는 것이 가장 좋습니다.

오프라인 재빌드가 얼마나 "피크"가 높은지 놀랐습니다. 에셋 프리컴파일은 확실히 메모리를 많이 사용하는데, VCPU가 많을수록 병렬 처리를 일부 수행하기 때문에 더 많이 사용할 수도 있습니다.

또한 제 경우 피크 차이가 생각보다 작았던 것도 놀라웠습니다. 다만 스왑 사용량은 현저히 낮았고, 전반적으로 오프라인 재빌드의 메모리 사용량은 훨씬 낮았습니다. 과정의 95% 동안 100MB대(수백 MB)를 유지한 반면, 온라인 업그레이드는 최소 1.7GB를 사용했습니다.

그렇게 보입니다. 물음표가 필요 없었네요!

즉, 앱을 다시 빌드하면 자동으로 최신 버전으로 업데이트되는 것인가요?

이전 버전의 discourse를 실행 상태로 유지하거나, 이전 버전에 대해 새로 설치하는 것이 지원되는 방법이나 비지원 방법이 있나요?

아니요, 하지만 stable로 변경하면 속도를 늦출 수 있습니다.

안타깝게도 이번에는 타이밍을 놓쳤습니다. 되돌아갈 수는 없으니까요.

좋아요, 개발자/베타 버전이 아니라 안정적으로 테스트된 업데이트만 받기 위해 해당 안정적 설정으로 변경하는 것이 좋을 것 같습니다. 어떻게 하면 되는지 알아보고 있어요.