Atualização 2.6.0 beta 3 falhou no espaço de disco e/ou memória

Me pergunto se, além dos problemas de espaço em disco, o processo de atualização excedeu a memória disponível (1 GB) alocada para o droplet? Você pode ver na minha captura de tela do console acima uma referência a ‘Out of memory’ como o primeiro item registrado após um ./launcher rebuild app

O que não mencionei é que, após essa tentativa, o console parou de responder (embora, nesse momento, eu estivesse usando o console baseado na web no Painel de Controle da Digital Ocean, que é sempre instável), e então fiz um reinício de energia no droplet. (A partir daí, usei o PuTTY)

De qualquer forma, não é bom que a atualização tenha sido relatada como bem-sucedida na página de atualização do Discourse após presumivelmente encontrar o mesmo problema de memória e/ou disco.

Ah, o OOM killer foi acionado. Isso certamente não é bom. Normalmente, recomendaria aumentar o espaço de swap. Você pode ver o uso atual com swapon; no meu caso:

# swapon
NAME      TYPE SIZE USED PRIO
/swapfile file   2G   3M   -2

Também free:

# free
              total        used        free      shared  buff/cache   available
Mem:        1992060      792904       80148       34696     1119008     1004956
Swap:       2097148        3084     2094064

Seria ruim se seu arquivo de swap de 2G não estivesse em uso. É ruim não conseguir adicionar swap sem usar espaço em disco!

Uma maneira de liberar espaço em disco para uma atualização é copiar todos os arquivos de backup para um local externo, verificar sua integridade e depois excluí-los do servidor. Você definitivamente precisa de um backup recente e confiável em algum lugar seguro durante a atualização, caso algo dê errado, mas ele não precisa estar no próprio servidor. Eu me sentiria confortável em excluir todos, exceto o mais recente, mas certamente faria uma cópia offline.

Seria bom ver os resultados do du novamente, agora que você fez todas as limpezas.

Eu me pergunto: o 1 GB é sua alocação de RAM e o 25 GB é sua alocação de disco? São duas coisas bem diferentes.

Edição: a história padrão suportada, eu acho, é ter bem mais do que 1 GB de RAM.
Edição: não, aparentemente 1 GB ainda é o mínimo absoluto recomendado.

Acabei de me conectar novamente, e as informações do sistema relatadas ao abrir a janela do console são:

Carga do sistema:  0.01               Processos:              136
Uso de /:   59,4% de 24,06 GB   Usuários logados:        0
Uso de memória: 73%                Endereço IP de eth0:    159.65.140.176
Uso de swap:   17%                Endereço IP de docker0: 172.17.0.1

Então, 17% de espaço de swap equivalem a 4 GB?
Com ninguém logado no fórum e apenas a conexão atual do PuTTY ao droplet ativa, a RAM está 73% cheia — o que sugere que não levaria muita atividade para fazer o fórum migrar para o espaço de swap. E se isso consumir parte dos 24 GB, talvez isso crie a tempestade perfeita durante uma atualização, quando o uso do espaço em disco já está alto?

du -kx / | sort -n | tail -33 agora me retorna:

root@nz:~# du -kx / | sort -n | tail -33
505512  /usr/bin
528784  /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/var/www/discourse/vendor/bundle/ruby/2.6.0
528788  /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/var/www/discourse/vendor/bundle/ruby
528792  /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/var/www/discourse/vendor/bundle
536848  /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/var/www/discourse/vendor
548952  /var/lib/docker/overlay2/c126267f944d8d7f12415ac4f5908eba8a6a686b093cad3e0115eded8edfd6ba/diff
548968  /var/lib/docker/overlay2/c126267f944d8d7f12415ac4f5908eba8a6a686b093cad3e0115eded8edfd6ba
817700  /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/usr/lib
827812  /var/log/journal/8bebc832e1a692c83690ffe65e1256e3
868792  /var/log/journal
1069356 /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/var/www/discourse
1069368 /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/var/www
1069396 /var/log
1142352 /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/var
1202004 /var/discourse/shared/standalone/import/data
1307816 /var/discourse/shared/standalone/import
1362804 /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/usr
1399332 /var/discourse/shared/standalone/backups/default
1399336 /var/discourse/shared/standalone/backups
1709408 /usr
2438224 /var/discourse/shared/standalone/postgres_data/base/16583
2462944 /var/discourse/shared/standalone/postgres_data/base
2481288 /var/discourse/shared/standalone/postgres_data
2540188 /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff
2540204 /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35
3387776 /var/lib/docker/overlay2
3460136 /var/lib/docker
3830584 /var/lib
5629420 /var/discourse/shared/standalone
5629504 /var/discourse/shared
5632224 /var/discourse
10747244        /var
14961492        /
root@nz:~#

Acho que você pode melhorar isso com journalctl, talvez com

# journalctl --vacuum-size=50M

(o que você pode fazer imediatamente antes de tentar uma atualização)

É interessante que o uso do PostgreSQL não tenha diminuído.

O comando free mostrará o uso da swap: está em 17% de uso, de algum valor, provavelmente 2G.

Está claro que sua máquina é um pouco pequena demais: você precisa de mais RAM ou mais swap, e não é prático ter muito mais swap sem obter mais disco.

Peço desculpas - você está muito certo. Os 1GB eram de RAM, não de espaço em disco utilizado.

Novamente, você tem razão.

root@nz:~# free
              total        used        free      shared  buff/cache   available
Mem:        1008828      655660       61716      102288      291452       96576
Swap:       2097148      459776     1637372

Será que o processo de atualização deveria avaliar a capacidade do sistema hospedeiro para implementar a atualização logo antes de começar?

Acho que isso se enquadra, até certo ponto, na categoria de prever o futuro! A verificação de 5 GB de espaço em disco é claramente útil, mas não será à prova de falhas. A RAM livre é mais difícil; é bastante instável determinar quanto será necessário. Creio que será uma função, dependendo de quão grande o fórum se tornou e, talvez, também do que precisa ser alterado a cada atualização.

Sou cuidadoso para minimizar custos, então vou gastar tempo tentando caber em um servidor barato. Mas, eventualmente, à medida que o fórum cresce, com certeza valerá a pena migrar para o próximo nível. E isso custará dinheiro, mas economizará tempo e esforço.

Infelizmente, estou bem no extremo de ‘minimizar custos’ da escala — o fórum é um esforço puramente voluntário, sem geração de receita, e com a adição de postagens por e-mail (via MailGun) exigida pelos usuários, pode me custar um pouco todo mês apenas para mantê-lo funcionando.

Comparado a outros hobbies, acho que é mais barato do que beber em boates!