Nginx/Gunicorn demorando muito para responder

Nginx/Gunicorn demorando muito para responder

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.

informação relacionada