Como posso rastrear um vazamento de memória com wsgi, django, php e apache2?

1

Eu estou executando 3 virtualhosts separados para o meu site (Django w / wsgi para o site principal, outro Django w / wsgi para a versão móvel do site, e um terceiro para o Wordpress servindo como o blog do site). Depois de algumas semanas, a memória de troca sobe ao ponto em que minha carga & Os tempos de ping se tornam muito lentos. Quando olho para top , vejo que há vários processos do Apache, cada um ocupando uma quantidade significativa de memória e funcionando há pelo menos uma hora.

Isso está em um servidor Ubuntu 10.04 em execução na nuvem Rackspace (instância média).

Estou executando os dois sites django com o wsgi no modo daemon (threads = 1, processes = 2).

As configurações principais do meu apache2.conf são assim (com várias coisas "irrelevantes" desmontadas para minimizar o tamanho dessa postagem - se você está esperando outra configuração, me avise, e eu posso verificar se eu a tenho lá dentro):

Timeout 120
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

Uma coisa que eu vi sugerido é mudar do Apache para um servidor web "menos inchado". Estou aberto a esta ideia, mas estou supondo que seria melhor mover o Wordpress do servidor para que eu não precise de PHP (ou esses outros servidores da web oferecem soluções php e python juntos?)

Deixe-me saber se você quiser mais alguma informação. Obrigado!

    
por Dolan Antenucci 13.07.2011 / 15:16

1 resposta

3

Use a opção display-name conforme documentada na documentação do mod_wsgi para rotular os processos do daemon mod_wsgi. Dessa forma você pode ver com 'ps' se os processos grandes são de fato os processos daemon mod_wsgi.

link

Se eles são muito gordos, o Apache ou mod_wsgi não tem nada a ver com isso. Será porque suas próprias aplicações são gordas. Isso pode ser devido ao cache excessivo de dados na memória ou vazamento de recursos.

Se o processo do daemon mod_wsgi rotulado não for gordo, talvez você não tenha delegado os aplicativos Python para serem executados nos processos daemon corretamente. Isso ou sua aplicação PHP é o problema.

link

Em suma, quando o seu aplicativo é gordo, não importa qual mecanismo de hospedagem você usa, eles ainda estarão gordos, e o Apache e mod_wsgi não têm nada a ver com isso, a menos que você tenha preenchido a configuração do Apache.

    
por 14.07.2011 / 04:51