PG::ConnectionBad faz o site cair temporariamente

Nos Logs de Erro, estou recebendo intermitentemente os seguintes erros. Isso deixa o site inacessível por 15 a 30 segundos até que ele volte.

Mensagem de Erro de Info:

PG::ConnectionBad (FATAL: o sistema de banco de dados está no modo de recuperação) /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/pg-1.2.3/lib/pg.rb:58:in `initialize’

Mensagem de Erro de Env:


Uma coisa realmente estranha que notei ao analisar esses logs é que parece que o sistema está procurando pela pasta em /var/www/…, mas essa pasta não existe no servidor. Ela deveria existir? Qualquer ajuda é apreciada.

Se o banco de dados estiver corrompido, o site necessariamente estará quebrado. Você precisa descobrir o motivo. As razões mais comuns são falta de RAM e espaço em disco. Minha suposição é que seja RAM. Quanto de RAM você tem? Qual é a saída do comando free -h?

Esse é o caminho dentro do contêiner. Se você executar ./launcher enter app, verá que ela está lá.

Acho que você está certo. Aqui está a saída do free -h.

image

131M livres não me parece muito.

Bem, você tem 646 MB disponíveis, e 4 GB é suficiente para que o swap geralmente não seja recomendado. Qual é o tamanho do seu banco de dados? Qual é o volume de tráfego? Há algo além do Discourse rodando no servidor?

Nada além do Discourse está rodando no servidor.

Para obter o tamanho, executei:

./launcher enter app
rails db
SELECT pg_size_pretty(pg_database_size(current_database()));

A saída resultante foi 4650 MB (1 linha).

Quanto ao tráfego:
Tivemos 1.200 visualizações de página ontem e 12.400 na última semana. Aproximadamente 160 usuários na última semana e cerca de 80 usuários simultâneos a qualquer momento.

Se você tiver espaço livre no disco, adicione uma área de swap para ganhar um pouco de respiro temporário.

Adicionei 1 GB de swap lá. Vamos ver o que acontece durante o tráfego intenso hoje à noite.

image

Você é o cara. A swap de 1 GB parece ter resolvido todos os problemas de travamento. Estou sinceramente feliz que tenha sido um problema de RAM e não de banco de dados. Vou aumentar a quantidade de RAM no servidor neste fim de semana. Muito obrigado a todos que ajudaram neste tópico!

Após fazer isso, execute novamente o discourse-setup para que ele redefina os parâmetros de memória.

Tenho curiosidade se eles foram afinados corretamente desde o início. :man_shrugging:t2:

Honestamente, não tenho certeza. Antes disso, fizemos uma reconstrução e reinicialização do servidor após mudar o hardware algum tempo atrás. Acredito que, após uma reinicialização, qualquer alteração no sistema teria sido detectada pelo Discourse.

Depois de instalar o arquivo de swap, houve momentos em que mais de 4 GB de “memória” estavam sendo usados, então parece que esse foi definitivamente o problema durante nossos períodos de maior atividade, que coincidem com os momentos em que o servidor travou. Fizemos uma atualização hoje e o site está funcionando muito bem agora.

Mas elas não são. Existem configurações que controlam, por exemplo, quanto de RAM o banco de dados pode usar, e que estão embutidas no app.yml. Você pode editá-las manualmente ou executar novamente o discourse-setup.

Eu executei novamente a função discourse-setup hoje, pois não tinha conhecimento disso antes. Foi novidade para mim.