Temos nginx proxying para apache w / mod wsgi e muito alta carga de servidor, como rastrear causa?

2

Temos uma instância nginx na frente do apache 2 (o nginx manipula recursos estáticos, solicitações de conteúdo dinâmico são intermediadas por proxy para o apache) que usa principalmente o mod_wsgi para o servidor de vários aplicativos python / django.

De repente, vemos uma alta carga de servidor (subindo constantemente para mais de 50, normalmente é menor que 1) e estamos procurando as melhores maneiras de rastrear a causa.

Existe uma maneira de ver quais hosts virtuais são responsáveis pelos processos do apache?

Algumas dicas gerais para diagnosticar a causa da alta carga do servidor também seriam bem-vindas.

Edit: Obrigado a todos pela ajuda, ele foi causado por um erro de código e nenhuma reconfiguração do servidor foi necessária. No entanto, as dicas fornecidas serão úteis no futuro.

    
por Andrew Ingram 24.08.2009 / 17:35

2 respostas

4

O módulo mod_status no Apache mostrará a você qual virtualhost / solicita um processo específico está lidando, mas isso só será útil se as solicitações forem de longa duração. Adicionar tempo de execução ( %D ) ao seu Apache LogFormat também é útil.

Mais importante é rastrear o gargalo. Para isso você precisa investigar iostat e vmstat (geralmente instalados por padrão) e uma adorável ferramenta nova que combina os dois e adiciona ainda mais coisas, dstat .

    
por 24.08.2009 / 18:14
1

Se você está vendo muita ação na coluna 'wa' sob 'cpu' quando você executa o vmstat (ie. muito tempo gasto esperando na entrada / saída), então eu suspeito que o problema é na verdade nginx, não Apache. Pode estar fazendo muito E / S porque seus buffers não são grandes o suficiente para lidar com o conteúdo com proxy.

Tente adicionar isso ao nginx.conf:

proxy_buffers  32 4k;

Aumente conforme necessário.

    
por 25.08.2009 / 03:47