Alguém poderia fornecer instruções para configurar a alocação de memória?
Dadas as mensagens esporádicas de kernel “out of memory”/dump, o aumento de 3x na troca (swap) e a resposta degradada crescente da aplicação, parece que nosso aplicativo às vezes está ficando sem memória. Nosso sistema atualmente possui 8 GB de memória e 2 GB de swap. Detalhes abaixo.
Revisei as instruções para adicionar mais memória física e swap em ("Cannot allocate memory" when upgrading), mas não consegui encontrar detalhes sobre como configurá-la.
No que diz respeito às configurações de memória, estamos usando todos os padrões. O sistema se recupera após alguns minutos, mas com o aumento do uso — achamos que é hora de nos educarmos sobre como melhorar o desempenho. No entanto, estou inseguro sobre onde e como configurar isso. Aumentar a memória alocada para a instância do Docker ou para o número de unicórnios Ruby (ou ambos)?
Sou um administrador de sistemas sem experiência em Ruby e com experiência limitada em Docker, então apontar-me na direção do arquivo de configuração e da sintaxe a ser usada ajudaria muito.
Você executou novamente o discourse-setup após aumentar sua RAM? Ele ajustará as configurações de memória de acordo. Você também pode ler os comentários no app.yml e ajustá-los.
Olá, Rafael e equipe, meu nome é Serge e trabalho com o Sr. Happy Lee, que acabou de partir para as tão esperadas férias, então ficarei responsável por este problema.
Para complementar a descrição: o servidor foi originalmente configurado com 8 GB de RAM e 2 GB de swap. Não realizamos nenhuma atualização desde então.
No log do sistema, vejo evidências de que o Ruby é o processo que está consumindo toda a memória e causando a OoM (Out of Memory) do kernel:
Killed process 2960 (ruby) total-vm:10031472kB, anon-rss:7438148kB, file-rss:0kB
Como não sou especialista em Ruby, não tenho certeza de como identificar qual processo dentro do Ruby está consumindo tanta memória.
o plugin foi pago para desenvolvimento pela nossa organização, então, infelizmente, não tenho permissão para expor o código-fonte aqui. Além disso, como o plugin funciona em outras instâncias sem problemas, isso me leva a pensar em aumentar os recursos de memória do servidor para esta instância específica. A máquina é uma VM, então posso facilmente dobrar a quantidade de memória e ver se isso resolve o problema.
Não há muito o que possamos fazer para depurar um código que não conseguimos ver do nosso lado. Você pode querer configurar o plugin Prometheus exporter para Discourse para acompanhar as métricas da sua instância.
As outras instâncias também estão executando a versão Ruby 2.3.1-2~ubuntu16.04.14?
Talvez não seja relevante, mas:
Então, isso foi claramente um bug do Ruby. Testamos em várias versões do Ruby e constatamos que apenas as versões 2.3.x e 2.4.x apresentavam o vazamento (aparentemente isso foi corrigido no Ruby 2.5.0****).
Olá Benjamin, as outras instâncias também estão executando Ruby 2.3.1-2~ubuntu16.04.14. Vou testar uma atualização para ver se não quebra nossa configuração do Docker.