O core dump e a instrução inválida indicam que algo está dando errado em um nível baixo (CPU, memória).
Não sou um especialista em hardware, mas essa CPU chegou ao mercado há 12 anos e suspeito que possa ser muito antiga (ou seja, ela está tentando executar código compilado que assume uma CPU mais nova).
Nós pensamos sobre isso, mas dado que tem funcionado bem nos últimos três anos, o que teria sido atualizado na stack que de repente requer uma instrução mais nova? (Além disso, qual/quais instrução?)
Também quero acrescentar que na última sexta-feira a atualização de versão principal foi realizada sem problemas e funcionou durante todo o fim de semana sem falhas. Eu até realizei uma atualização bem-sucedida no domingo. Se for a CPU, o que é compreensível, a causa, então teria mostrado este erro com a atualização de versão principal.
Mas, talvez tenha havido uma mudança desde segunda-feira…
Isso pode muito bem ser, está travando em uma rotina de análise de json, no código do message bus, embora essa alteração que você mencionou tenha mais de 4 meses.
-- Informações de backtrace do nível C -------------------------------------------
/usr/local/lib/libruby.so.2.7(rb_vm_bugreport+0x50a) [0x7f30fc64839a] vm_dump.c:755
[0x7f30fc4b9b47]
/usr/local/lib/libruby.so.2.7(sigill+0x3b) [0x7f30fc5c4f0b] signal.c:962
/lib/x86_64-linux-gnu/libc.so.6(0x7f30fc283d60) [0x7f30fc283d60]
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/oj-3.13.15/lib/oj/oj.so(oj_parse2+0x4f9) [0x7f30f3a68339] /usr/lib/gcc/x86_64-linux-gnu/10/include/smmintrin.h:649
Os caminhos do código também podem ser acionados com a presença ou ausência de determinados dados. Talvez o código ofensivo estivesse presente, mas não estava sendo executado.
Vou tentar uma espécie de busca binária no último conjunto de commits e ver se consigo reduzir a um commit recente específico. Isso levará “algum tempo”…
Alguns commits anteriores também falham na compilação, mas com um problema diferente (que também parece ser transitório…):
I, [2022-07-05T12:14:35.377926 #1] INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
102:M 05 Jul 2022 12:14:44.308 * 100 changes in 300 seconds. Saving...
102:M 05 Jul 2022 12:14:44.312 * Background saving started by pid 709
709:C 05 Jul 2022 12:14:45.166 * DB saved on disk
709:C 05 Jul 2022 12:14:45.169 * RDB: 1 MB of memory used by copy-on-write
102:M 05 Jul 2022 12:14:45.217 * Background saving terminated with success
I, [2022-07-05T12:14:46.192386 #1] INFO -- :
I, [2022-07-05T12:14:46.193317 #1] INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake themes:update assets:precompile'
Missing yarn packages:
Package: ember-cli-deprecation-workflow
* Specified: ^2.1.0
* Installed: (not installed)
Run `yarn` to install missing dependencies.
Stack Trace and Error Report: /tmp/error.dump.ccfa3d8342a442ee6860db37ce7c7330.log
An error occurred in the constructor for ember-cli-dependency-checker at /var/www/discourse/app/assets/javascripts/node_modules/ember-cli-dependency-checker
error Command failed with exit code 1.
Adorável. Uma alteração adicional não mencionada no changelog do oj…
Portanto, se a gem não fizer sua compilação nativa durante a instalação (então poderíamos potencialmente forçá-la a funcionar via OJ_USE_SSE4_2), parece que precisaremos de uma mudança de servidor…
Editar: a gem não distribui nenhum objeto pré-compilado, então isso deve ser viável - então a próxima pergunta é por que ela está compilando com SSE4.2 em um sistema que não o suporta.
Gostaria de investigar isso um pouco mais, mas 1) quero evitar mais tempo de inatividade (por enquanto, pelo menos; sei que o acima não envolve tempo de inatividade, mas posso ser tentado a tentar outras coisas) e 2) quando isso mudar:
para 3.13.15 e a imagem base do Discourse herdar o mesmo requisito mínimo de microarquitetura de CPU, então o servidor atual não será sustentável de qualquer maneira (a menos que haja uma maneira de contornar isso, como (re)instalar a gema separadamente, por exemplo, como parte de um hook pré-código, mas eu também acho que isso seria um incômodo para a maioria das pessoas).
Isso também levanta a questão de qual seria uma data de corte razoável para o suporte de hardware; não é razoável esperar suporte para CPU de 32 bits, então talvez SSE4.2 seja um “novo mínimo” razoável para software moderno.
Obrigado por investigar isso. Estou tendo o mesmo problema em um Intel Atom N2800 (do final de 2011).
Você acha que pode haver uma maneira de contornar esse problema ou a única coisa que posso fazer por enquanto é migrar para hardware mais novo?
Estou em maus lençóis agora com meu fórum com a atualização que me foi solicitada hoje. Nunca vi nenhum aviso sobre a futura obsolescência de nenhuma CPU e ter isso acontecido repentinamente é… ruim. Os servidores disponíveis têm todos a mesma configuração para consistência e todos usam a mesma CPU.
AMD Athlon™ II X2 B22 Processor
Não é prático sair e comprar um novo servidor, configurar, etc. nesta economia, mesmo com o tempo.
Como posso reverter esta atualização até que esta situação seja melhor compreendida? Não consigo nem mesmo contatar meus usuários agora com o fórum inativo. Obrigado.
Se você estiver usando o método de implantação Docker, pode ter um contêiner mais antigo que pode reiniciar (verifique, por exemplo, docker images e/ou docker ps -a).
Você também pode substituir o commit usado para construir a instância do Discourse editando app.yml e definindo a versão para o commit anterior à alteração, e então reconstruindo:
O Discourse quebrará novamente se você atualizar depois disso, o que não é ideal, dada a atualização de segurança que foi lançada desde então (embora o potencial de exploração pareça bastante limitado para a maioria das instâncias).
Essa atualização de segurança específica não parece relevante para mim, pois não estou em um ambiente de hospedagem compartilhada. Não tenho certeza de como interpretar as informações do docker. Aqui está o ps: