Eu tenho uma configuração de aplicativo Django para servir arquivos estáticos via Nginx e o upstream rodando através do Gunicorn para executar o aplicativo Django com um banco de dados PSQL residente em um servidor dedicado.
O problema é que o site está demorando muito para responder, mesmo para a página inicial que não exige uma visita ao banco de dados.
Um detalhe importante a ser observado é que quando reinicio o serviço supervisor (que é responsável por dois processos, sendo um gunicorn e outro celery), obtenho respostas rápidas para no máximo 3 solicitações.
Após essas 3 solicitações, o aplicativo não responde novamente.
Quanto à configuração, o Nginx está configurado com tempos limite (todos os 3: conectar, ler e enviar) definidos como 300.
O Gunicorn tem o mesmo tempo limite e está configurado para ter 3 trabalhadores em execução.
O aplicativo está sendo executado em um VPS com uma única CPU e 1 GB de memória.
Abaixo está a saída deiostatpara estatísticas básicas.
avg-cpu: %user %nice %system %iowait %steal %idle
1.49 0.00 0.44 0.03 3.21 94.83
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
xvda 0.74 3.23 12.79 1023355 4054257'
O que poderia estar causando esse comportamento?
Responder1
Conforme mencionado nos comentários de Tero Kilkanen, o problema era o próprio código.
Eu estava martelando o servidor com solicitações para conseguir alguma aparência de um aplicativo em tempo real e isso, por sua vez, tornou todo o servidor indisponível para atender outras solicitações.
Observar as estatísticas do servidor não ajudou a elucidar o problema, pois todas as métricas mostraram que o servidor estava disponível para trabalhar.
Portanto, se você encontrar esse problema, verifique os logs do Nginx em busca de várias solicitações em um curto intervalo.