Ajustando o site baseado em django implementado usando o apache wsgi para melhor desempenho

1
Estou executando o aplicativo django usando apache + mod_wsgi, eu configurei 6 servidores ubuntu médios no Amazon ec2 em que 2 para mongo e 4 para django e apache, usando ebs para postgresql e configurando um balanceador de carga em torno de todos os servidores apache, cada servidor está tendo 4 GB de RAM, mas durante a carga pesada o sistema fica lento, eu vi usando o comando top que o apache está usando 7 processos e comendo aproximadamente 2.4 GB de RAM. Abaixo está a configuração do módulo prefork MPM do apache

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

e isso é para o processo do daemon wsgi

WSGIDaemonProcess example user=abc group=abc processes=2 threads=25

altero MaxClients para 12 seguindo este artigo link , mas estou recebendo "Solicitação Tempo limite de leitura de cabeçalho "no log de erros do apache. Por favor, ajude-me a ajustar o apache para um melhor desempenho.

    
por user969923 02.05.2014 / 08:17

2 respostas

2

A configuração que você usa realmente depende das especificidades do seu aplicativo da web específico do Python. Sem o monitoramento adequado, será muito difícil ajustar sua configuração do Apache e do mod_wsgi.

Em apenas o que você explicou até agora, posso ver vários possíveis problemas.

O primeiro é que você pretende usar o modo daemon mod_wsgi, mas você está? Você não fornece a configuração completa e a diretiva WSGIDaemonProcess sozinha não significa que você está realmente usando o modo daemon. Se você não tiver configurado o modo daemon adequadamente, consumirá muita memória muito rapidamente com essa configuração, já que o aplicativo da Web pode estar em execução nos processos do worker secundário do Apache e não nos processos do modo daemon mod_wsgi.

Um segundo problema, se você não estiver usando o modo daemon corretamente, é que suas configurações mínimas / máximas causarão rotatividade de processos. Isso causará uma maior carga de CPU devido ao recarregamento constante de seu aplicativo, pois o volume de tráfego sobe e desce rapidamente.

Um terceiro é que mesmo se você estiver usando o modo daemon corretamente, você desativou o Python de executar nos processos de trabalho filho do Apache para economizar memória e CPU? Por que você está usando o prefork MPM e não o worker MPM, o que é muito melhor se você estiver usando o modo daemon mod_wsgi.

Um quarto é que, dependendo do equilíbrio entre as tarefas de limite de CPU e de E / S em seu aplicativo da Web, dois processos e 25 segmentos podem ser muito ruins. Usando apenas 3 processos com 5 threads cada um pode ser melhor, mas não sabendo o que você faz, é realmente difícil dizer, o monitoramento é realmente necessário.

De qualquer forma, eu poderia continuar, já que não são todos os possíveis problemas que eu vejo, mas um deles está realmente supondo sem dados reais de desempenho para avaliar o que você deve fazer.

Tudo o que posso sugerir que você faça é ler / assistir o seguinte:

Considere instalar algum monitoramento e, se ainda não souber o que fazer, use a lista de discussão mod_wsgi para obter ajuda, conforme explicado em:

Os sites do StackOverflow podem estar bem para respostas simples favorecendo o público do TLDR, mas eles são um fórum inútil para uma discussão apropriada de um tópico como este, já que não há uma resposta simples que possa ser dada em duas frases.

    
por 02.05.2014 / 10:55
0

Tivemos uma situação semelhante, embora em uma configuração mais simples, e resolvemos os problemas de desempenho usando um número maior de processes na diretiva WSGIDaemonProcess .

Veja " Quantos processos devo especificar em um WSGIDaemonProcess enquanto estiver executando o Django através de mod_wsgi? "para uma discussão aprofundada.

    
por 14.11.2014 / 05:20