Fazer as configurações do Apache + mod_wsgi httpd.conf para o django afetar o mysql?

3

Eu tenho um site django usando Apache e mod_wsgi. Desde os últimos 4-5 dias, recebo este tipo de erro no meu e-mail de administrador.

OperationalError: (1040, 'Too many connections')

Instalei o django-debug-toolbar e tenho uma média de 100-150 consultas para cada página e menos de 300ms de tempo de resposta. Eu não acho que eu sobrecarregue meu servidor MySql. Por outro lado, isso aconteceu depois que tentei reconfigurar minhas configurações de httpd.conf .

Meu site recebe de 800 a 1000 acessos por dia.

Estas são as minhas httpd.conf configurações

KeepAlive Off
Listen 13646
MaxSpareThreads 15
MinSpareThreads 8
MaxClients 20
ServerLimit 20
SetEnvIf X-Forwarded-SSL on HTTPS=1
ThreadsPerChild 5
MaxRequestsPerChild 1000000
StartServers 20
WSGIDaemonProcess <project> processes=7 threads=12 python-path=<path>
WSGIProcessGroup <project>
WSGIRestrictEmbedded off
WSGILazyInitialization On

Qualquer ajuda seria muito apreciada.

PS. Eu estou em um plano de hospedagem compartilhada. Eu tenho 512MB de RAM para o meu plano de hospedagem 300MB deles são gratuitos.

    
por xpanta 25.07.2012 / 10:27

1 resposta

6

Alguns comentários sobre sua configuração.

  1. MaxSpareThreads e MinSpareThreads devem ser realmente um múltiplo de ThreadsPerChild. Se não for, com algumas combinações de valores, você pode obter o ciclo do Apache entre criar novos processos porque acha que precisa deles e depois decidir o próximo momento para matá-los novamente, porque muda de ideia e os vê como excesso. Então, mude MinSpareThreads para 5.

  2. MaxClients diz que pode ter no máximo 20 solicitações simultâneas em todos os processos de trabalho filho do Apache. No entanto, os processos de daemon mod_wsgi aos quais estão fazendo proxy, têm capacidade para manipular 7 * 12 = 84. Portanto, você está sobrecarregado no processo / threads do daemon porque os processos de trabalho filho do Apache nunca poderão passar por mais de 20 solicitações ao mesmo tempo. Uma configuração melhor e uma que usa menos memória é process = 4 e threads = 5.

  3. Os StartServers definidos como 20 são altos se você estiver usando o worker MPM. Tecnicamente, os StartServers não podem ser mais do que MaxClients / ThreadsPerChild para o worker MPM. Então, defina StartServers como 2.

  4. MaxRequestsPerChild é definido arbitrariamente alto e com sua taxa de transferência de solicitações, você também pode configurá-lo para o padrão normal de 0, o que significa manter os processos em vez de reciclá-los em um número máximo de solicitações. Como o aplicativo da Web Python está sendo executado no modo daemon mod_wsgi, não deve haver a necessidade de reciclar o processo de trabalho filho do Apache de qualquer maneira.

De qualquer forma, é improvável que isso altere seu problema original, mas crie uma configuração mais ideal.

    
por 25.07.2012 / 17:48