Docker Manager: 업그레이드 실패

안녕하세요,

Discourse를 업그레이드하려고 했으나 다음과 같은 메시지가 표시됩니다:

죄송합니다. Discourse 업그레이드 중 오류가 발생했습니다. 아래 로그를 확인해 주세요.

********************************************************
*** 다음 단계에는 시간이 좀 걸릴 수 있으니 잠시만 기다려 주세요 ***
********************************************************
메모리를 확보하기 위해 Unicorn을 재시작합니다.
unicorn pid: 663 재시작 중
Unicorn 재로드 대기 중.
Unicorn 재로드 대기 중..
Unicorn 재로드 대기 중...
Unicorn 재로드 대기 중....
oj 3.10.15 사용 중
optimist 3.0.1 사용 중
pg 1.2.3 사용 중
r2 0.2.7 사용 중
raindrops 0.19.1 사용 중
rchardet 1.8.0 사용 중
rinku 2.0.6 사용 중
rotp 6.2.0 사용 중
rqrcode_core 0.1.2 사용 중
rtlit 0.0.5 사용 중
rubyzip 2.3.0 사용 중
tilt 2.0.10 사용 중
sshkey 2.0.0 사용 중
stackprof 0.2.16 사용 중
unf_ext 0.0.7.7 사용 중
xorcist 1.1.2 사용 중
i18n 1.8.5 사용 중
tzinfo 1.2.7 사용 중
nokogiri 1.10.10 사용 중
rack-test 1.1.0 사용 중
mail 2.7.1 사용 중
addressable 2.7.0 사용 중
aws-sigv4 1.2.0 사용 중
barber 0.12.2 사용 중
cose 1.2.0 사용 중
ember-data-source 3.0.2 사용 중
sprockets 3.7.2 사용 중
discourse_image_optim 0.26.2 사용 중
faraday 1.1.0 사용 중
request_store 1.5.0 사용 중
message_bus 3.3.4 사용 중
pry 0.13.1 사용 중
rack-mini-profiler 2.2.0 사용 중
rack-protection 2.1.0 사용 중
uglifier 4.2.0 사용 중
logstash-logger 0.26.1 사용 중
mini_racer 0.3.1 사용 중
sidekiq 6.1.2 사용 중
mini_suffix 0.3.0 사용 중
nokogumbo 2.0.2 사용 중
omniauth 1.9.1 사용 중
puma 5.0.4 사용 중
rbtrace 0.4.14 사용 중
redis-namespace 1.8.0 사용 중
rqrcode 1.1.2 사용 중
ruby-readability 0.7.0 사용 중
sassc 2.0.1 사용 중
unf 0.1.4 사용 중
unicorn 5.7.0 사용 중
webpush 1.0.0 사용 중
activesupport 6.0.3.3 사용 중
loofah 2.7.0 사용 중
bootsnap 1.5.0 가져오는 중
ember-handlebars-template 0.8.0 사용 중
mini_scheduler 0.12.3 사용 중
oauth2 1.4.4 사용 중
omniauth-oauth 1.1.0 사용 중
sanitize 5.2.1 사용 중
pry-byebug 3.9.0 사용 중
pry-rails 0.3.9 사용 중
rails-dom-testing 2.0.3 사용 중
rails-html-sanitizer 1.3.0 사용 중
globalid 0.4.2 사용 중
activemodel 6.0.3.3 사용 중
aws-sdk-core 3.99.1 사용 중
css_parser 1.7.1 사용 중
actionview 6.0.3.3 사용 중
activejob 6.0.3.3 사용 중
active_model_serializers 0.8.4 사용 중
activerecord 6.0.3.3 사용 중
aws-sdk-kms 1.31.0 사용 중
aws-sdk-sns 1.25.1 사용 중
omniauth-oauth2 1.7.0 사용 중
omniauth-twitter 1.4.0 사용 중
onebox 2.1.4 사용 중
actionpack 6.0.3.3 사용 중
actionview_precompiler 0.2.3 사용 중
aws-sdk-s3 1.66.0 사용 중
omniauth-facebook 8.0.0 사용 중
omniauth-github 1.4.0 사용 중
omniauth-google-oauth2 0.8.0 사용 중
seed-fu 2.3.9 사용 중
actionmailer 6.0.3.3 사용 중
railties 6.0.3.3 사용 중
sprockets-rails 3.2.2 사용 중
jquery-rails 4.4.0 사용 중
lograge 0.11.2 사용 중
rails_failover 0.5.7 사용 중
rails_multisite 2.5.0 사용 중
sassc-rails 2.1.2 사용 중
discourse-ember-rails 0.18.6 사용 중
네이티브 확장 기능이 포함된 bootsnap 1.5.0 설치 중
Bundle 완료! 123개의 Gemfile 종속성, 161개의 gems가 이제 설치되었습니다.
test 및 development 그룹의 gems는 설치되지 않았습니다.
Bundle된 gems는 `./vendor/bundle`에 설치되었습니다.
$ bundle exec rake plugin:pull_compatible_all
docker_manager는 이미 최신 호환 버전입니다
discourse-data-explorer는 이미 최신 호환 버전입니다
$ SKIP_POST_DEPLOYMENT_MIGRATIONS=1 bundle exec rake multisite:migrate
Multisite migrator가 1개 스레드를 사용하여 실행 중입니다

기본(default) 마이그레이션 중
== 20201027110546 CreateLinkedTopics: 마이그레이션 중 ===============================
-- create_table(:linked_topics)
   -> 0.0524초
-- add_index(:linked_topics, [:topic_id, :original_topic_id], {:unique=>true})
   -> 0.0066초
-- add_index(:linked_topics, [:topic_id, :sequence], {:unique=>true})
   -> 0.0045초
== 20201027110546 CreateLinkedTopics: 마이그레이션 완료 (0.0676초) ======================

기본(default) 시딩 중

[...]


locales/ko-0c530732e52b234cd31ea1959ec4b5127cfcc2cb5b076d4999abfa0530e5bba5.js 압축 완료 : 0.11초

8625116.65540771 압축 중: application-1e74fe54a11795d2a94b9b90ac1f18294214d956e95b882737a05319d5d11ff9.js
uglifyjs '/var/www/discourse/public/assets/_application-1e74fe54a11795d2a94b9b90ac1f18294214d956e95b882737a05319d5d11ff9.js' -m -c -o '/var/www/discourse/public/assets/application-1e74fe54a11795d2a94b9b90ac1f18294214d956e95b882737a05319d5d11ff9.js' --source-map "base='/var/www/discourse/public/assets',root='/assets',url='/assets/application-1e74fe54a11795d2a94b9b90ac1f18294214d956e95b882737a05319d5d11ff9.js.map'"
Killed
Docker Manager: 업그레이드 실패
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:178:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:86: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/2.6.0/gems/bootsnap-1.4.9/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:59:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.9/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:59:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/commands/runner/runner_command.rb:42:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/command/base.rb:69:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/command.rb:46:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/commands.rb:18:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.9/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.9/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.9/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.9/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.9/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/dependencies.rb:324:in `block in require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/dependencies.rb:291:in `load_dependency'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/dependencies.rb:324:in `require'
bin/rails:17:in `<main>'
처음에 중지되었던 1개의 Unicorn 워커를 시작하는 중

기기의 RAM과 스왑 공간이 충분한가요? free 명령어나 top 명령어로 확인할 수 있습니다. 또한 다음 명령어를 사용해 프로세스가 종료된 기록이 있는지 확인해 볼 수 있습니다.
dmesg | egrep -3i kill
메모리 부족(OOM 킬러) 때문일 것으로 추정됩니다.

글쎄, 믿기 어렵게도 제 업그레이드도 똑같은 방식으로 실패했습니다! docker manager와 data explorer는 성공적으로 업데이트했는데, 동일한 파일에서 uglifyjs를 실행하는 같은 단계에서 ‘killed’ 오류가 발생했습니다.

저는 1GB RAM과 2GB 스왑이 있는 Digital Ocean 드롭렛을 사용 중이며, relativamente 작은 포럼(백업 크기가 700MB)을 운영하고 있습니다.

참고로 제 dmesg 로그는 다음과 같습니다:

[36473663.447053] systemd-journal invoked oom-killer: gfp_mask=0x14200ca(GFP_HIGHUSER_MOVABLE), nodemask=(null), order=0, oom_score_adj=0
[36473663.447056] systemd-journal cpuset=/ mems_allowed=0
[36473663.447070] CPU: 0 PID: 22784 Comm: systemd-journal Not tainted 4.15.0-60-generic #67-Ubuntu
[36473663.447071] Hardware name: DigitalOcean Droplet, BIOS 20171212 12/12/2017
[36473663.447081] Call Trace:
[36473663.447349]  dump_stack+0x63/0x8b
[36473663.447388]  dump_header+0x71/0x285
[36473663.447393]  oom_kill_process+0x21f/0x420
[36473663.447395]  out_of_memory+0x2b6/0x4d0
[36473663.447405]  __alloc_pages_slowpath+0xa53/0xe00
[36473663.447410]  __alloc_pages_nodemask+0x29a/0x2c0
[36473663.447774]  alloc_pages_current+0x6a/0xe0
[36473663.447937]  __page_cache_alloc+0x81/0xa0
[36473663.447942]  filemap_fault+0x3ea/0x6f0
[36473663.447953]  ? page_add_file_rmap+0x134/0x180
[36473663.447957]  ? filemap_map_pages+0x181/0x390
[36473663.448469]  ext4_filemap_fault+0x31/0x44
[36473663.448476]  __do_fault+0x5b/0x115
[36473663.448479]  __handle_mm_fault+0xdef/0x1290
[36473663.448482]  handle_mm_fault+0xb1/0x210
[36473663.448502]  __do_page_fault+0x281/0x4b0
[36473663.448507]  do_page_fault+0x2e/0xe0
[36473663.448683]  ? async_page_fault+0x2f/0x50
[36473663.448851]  do_async_page_fault+0x51/0x80
[36473663.448856]  async_page_fault+0x45/0x50
[36473663.448865] RIP: 0033:0x7fea40ede2a0
[36473663.448866] RSP: 002b:00007ffeefb58698 EFLAGS: 00010246
[36473663.448869] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
[36473663.448870] RDX: 00005591e7e980d8 RSI: 0000000000000001 RDI: 00007ffeefb586e8
[36473663.448871] RBP: 0000000000000003 R08: 0000000000000000 R09: 0000000000000000
[36473663.448872] R10: 0000000000000000 R11: 00005591e7e980d7 R12: 0000000000000001
[36473663.448873] R13: 00007ffeefb58f2b R14: 0005b3218d061ac0 R15: 00007ffeefb5b110
[36473663.448876] Mem-Info:
[36473663.448881] active_anon:103502 inactive_anon:103644 isolated_anon:0
                   active_file:11 inactive_file:28 isolated_file:0
                   unevictable:0 dirty:0 writeback:0 unstable:0
                   slab_reclaimable:6881 slab_unreclaimable:11795
                   mapped:200 shmem:924 pagetables:5723 bounce:0
                   free:12159 free_pcp:177 free_cma:0
[36473663.448886] Node 0 active_anon:414008kB inactive_anon:414576kB active_file:44kB inactive_file:112kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:800kB dirty:0kB writeback:0kB shmem:3696kB shmem_thp: 0kB shmem_pmdmapped: 0kB anon_thp: 0kB writeback_tmp:0kB unstable:0kB all_unreclaimable? no
[36473663.448887] Node 0 DMA free:4392kB min:756kB low:944kB high:1132kB active_anon:5156kB inactive_anon:4388kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15908kB mlocked:0kB kernel_stack:16kB pagetables:376kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
[36473663.448897] lowmem_reserve[]: 0 909 909 909 909
[36473663.448901] Node 0 DMA32 free:44244kB min:44296kB low:55368kB high:66440kB active_anon:408852kB inactive_anon:410188kB active_file:44kB inactive_file:112kB unevictable:0kB writepending:0kB present:1032172kB managed:993356kB mlocked:0kB kernel_stack:3360kB pagetables:22516kB bounce:0kB free_pcp:708kB local_pcp:708kB free_cma:0kB
[36473663.448906] lowmem_reserve[]: 0 0 0 0 0
[36473663.448910] Node 0 DMA: 20*4kB (UME) 9*8kB (UE) 27*16kB (UME) 25*32kB (UE) 13*64kB (UME) 7*128kB (UE) 3*256kB (UME) 1*512kB (E) 0*1024kB 0*2048kB 0*4096kB = 4392kB
[36473663.448924] Node 0 DMA32: 5*4kB (MH) 4460*8kB (UEH) 236*16kB (UEH) 107*32kB (UEH) 7*64kB (H) 3*128kB (H) 2*256kB (H) 0*512kB 0*1024kB 0*2048kB 0*4096kB = 44244kB
[36473663.449132] Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=1048576kB
[36473663.449147] Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
[36473663.449149] 6868 total pagecache pages
[36473663.449151] 5896 pages in swap cache
[36473663.449153] Swap cache stats: add 105451532, delete 105445636, find 1375786355/1418920464
[36473663.449153] Free swap  = 0kB
[36473663.449154] Total swap = 2097144kB
[36473663.449156] 262041 pages RAM
[36473663.449156] 0 pages HighMem/MovableOnly
[36473663.449157] 9725 pages reserved
[36473663.449158] 0 pages cma reserved
[36473663.449158] 0 pages hwpoisoned
[36473663.449160] [ pid ]   uid  tgid total_vm      rss pgtables_bytes swapents oom_score_adj name
[36473663.449180] [  404]     0   404    24427        0    90112       53             0 lvmetad
[36473663.449184] [  408]     0   408    11305       81   114688      169         -1000 systemd-udevd
[36473663.449187] [  621] 62583   621    35482        0   188416      183             0 systemd-timesyn
[36473663.449189] [  697]   100   697    17992        0   167936      194             0 systemd-network
[36473663.449192] [  715]   101   715    17689        0   176128      187             0 systemd-resolve
[36473663.449194] [  889]     0   889   163096        0   163840      537             0 lxcfs
[36473663.449197] [  891]   102   891    65759       42   163840      406             0 rsyslogd
[36473663.449199] [  894]     0   894     7937        0   102400       77             0 cron
[36473663.449202] [  896]     0   896     7083        0   102400       61             0 atd
[36473663.449204] [  900]   103   900    12545        0   143360      200          -900 dbus-daemon
[36473663.449212] [  907]     0   907    42752        2   237568     1979             0 networkd-dispat
[36473663.449215] [  910]     0   910    17665        2   176128      207             0 systemd-logind
[36473663.449217] [  914]     0   914    71996       32   204800      198             0 accounts-daemon
[36473663.449220] [  919]     0   919   194250     1174   303104     3846             0 containerd
[36473663.449222] [  920]     0   920   230106     2962   585728     8271          -500 dockerd
[36473663.449225] [  925]     0   925     4103        0    77824       38             0 agetty
[36473663.449227] [  931]     0   931     3722        0    73728       36             0 agetty
[36473663.449230] [  939]     0   939    72220        0   200704      249             0 polkitd
[36473663.449237] [  942]     0   942    18074        3   176128      187         -1000 sshd
[36473663.449240] [  951]     0   951    46930        0   266240     2008             0 unattended-upgr
[36473663.449242] [22784]     0 22784    26418       41   225280     2854             0 systemd-journal
[36473663.449245] [25413]     0 25413   101377        0   122880      360          -500 docker-proxy
[36473663.449248] [25424]     0 25424   119810        0   126976      362          -500 docker-proxy
[36473663.449256] [25430]     0 25430    27189       62    73728      194          -999 containerd-shim
[36473663.449259] [25454]     0 25454     1666        1    49152       79             0 boot
[36473663.449261] [25534]     0 25534      578        6    40960       15             0 runsvdir
[36473663.449263] [25535]     0 25535      540        0    40960       26             0 runsv
[36473663.449266] [25536]     0 25536      540        0    40960       22             0 runsv
[36473663.449268] [25537]     0 25537      540        0    40960       24             0 runsv
[36473663.449270] [25538]     0 25538      540        0    40960       29             0 runsv
[36473663.449273] [25539]     0 25539      540        0    40960       24             0 runsv
[36473663.449275] [25540]     0 25540      540        3    40960       13             0 runsv
[36473663.449277] [25541]     0 25541      576        0    45056       35             0 svlogd
[36473663.449280] [25542]   105 25542    53482       35   159744      442             0 postmaster
[36473663.449282] [25543]     0 25543    13506        1    81920      282             0 nginx
[36473663.449284] [25544]  1000 25544     3783       58    57344       62             0 unicorn_launche
[36473663.449286] [25545]     0 25545      576        0    45056       25             0 svlogd
[36473663.449289] [25547]     0 25547     2110       27    57344       42             0 cron
[36473663.449291] [25548]     0 25548    39047        0    77824      203             0 rsyslogd
[36473663.449293] [25546]   106 25546    23422      738   192512     5508             0 redis-server
[36473663.449296] [25561]    33 25561    13971      190    86016      465             0 nginx
[36473663.449298] [25562]    33 25562    13647       34    73728      302             0 nginx
[36473663.449305] [25570]   105 25570    53537       43   417792      510             0 postmaster
[36473663.449308] [25571]   105 25571    53515       67   417792      459             0 postmaster
[36473663.449310] [25572]   105 25572    53482       32   147456      457             0 postmaster
[36473663.449313] [25573]   105 25573    53650      117   159744      494             0 postmaster
[36473663.449315] [25574]   105 25574    17255      135   135168      443             0 postmaster
[36473663.449318] [25575]   105 25575    53616       46   147456      510             0 postmaster
[36473663.449320] [ 4226]  1000  4226  2211682        0  1052672    65182             0 ruby
[36473663.449323] [ 4227]  1000  4227  2211682        0  1052672    65183             0 ruby
[36473663.449326] [ 4228]  1000  4228  2209633        1  1048576    63664             0 ruby
[36473663.449329] [ 5795]  1000  5795  2192955        0   901120    56821             0 ruby
[36473663.449331] [ 5796]  1000  5796  2192955        0   901120    56821             0 ruby
[36473663.449333] [ 5797]  1000  5797  2198075        0   942080    59138             0 ruby
[36473663.449335] [ 7772]  1000  7772  2191931        0   888832    60531             0 ruby
[36473663.449338] [ 7773]  1000  7773  2193980        0   892928    60533             0 ruby
[36473663.449340] [ 7774]  1000  7774  2201147        0   966656    58519             0 ruby
[36473663.449343] [ 2288]  1000  2288  2209634        0  1060864    61931             0 ruby
[36473663.449351] [ 2289]  1000  2289  2209634        0  1060864    61931             0 ruby
[36473663.449353] [ 2290]  1000  2290  2209634        0  1060864    62542             0 ruby
[36473663.449356] [ 5703]  1000  5703    85022    31182   630784     9841             0 ruby
[36473663.449358] [ 5769]  1000  5769    85061    13030   643072    37318             0 ruby
[36473663.449360] [ 5860]   105  5860    56272       91   311296     2231             0 postmaster
[36473663.449363] [ 5966]  1000  5966  2195273    31501   925696    25578             0 ruby
[36473663.449365] [ 6043]   105  6043    54544      368   352256     1199             0 postmaster
[36473663.449368] [ 6288]  1000  6288      597        0    40960       21             0 sh
[36473663.449370] [ 6289]  1000  6289  4448400    61634  1380352    48635             0 bundle
[36473663.449373] [ 7218]  1000  7218      597       17    40960        0             0 sh
[36473663.449375] [ 7219]  1000  7219   198147    65087  4608000      134             0 node
[36473663.449377] Out of memory: Kill process 6289 (bundle) score 142 or sacrifice child
[36473663.454341] Killed process 7218 (sh) total-vm:2388kB, anon-rss:68kB, file-rss:0kB, shmem-rss:0kB
[36473663.531344] oom_reaper: reaped process 7218 (sh), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB

약간의 다운타임을 감수하고, 일반적인 우회 방법을 적용하여 업그레이드를 완료했습니다:

./launcher rebuild app

그러나 1GB RAM + 2GB 스왑은 작은 포럼을 위한 권장 최소 구성이므로, 뭔가 문제가 있는 것 같습니다.

리빌드 중 가상 메모리 사용량은 그렇게 나쁘지 않았으며, 동일한 uglifyjs 실행 중 최저 사용량은 다음과 같았습니다.

# free
              total        used        free      shared  buff/cache   available
Mem:        1009264      380204      537900        5712       91160      510756
Swap:       2097144      498540     1598604

감사합니다,
정상 작동합니다!

“killed”은 메모리가 부족하다는 뜻입니다.

이 문제는 업그레이드 중에 사이트를 더 오래 유지하려고 시도하는 Docker 매니저의 변경 사항과 관련이 있을 가능성이 높으며, 이는 업그레이드 중 RAM 요구 사항을 증가시켰을 것입니다.

컨테이너 재구성은 사이트를 일시적으로 종료하기 때문에 최대 RAM을 확보할 수 있어 항상 작동합니다.