Apache ab test e falha - problema de configuração do Apache ou do PHP?

3

Eu escrevi um serviço web RESTful para ser o backbone por trás de um aplicativo móvel usando PHP e a biblioteca do Restler. Ele está sendo executado no meu servidor de desenvolvimento executando o Windows Server 2008 R2, o PHP 5.3.5, o Apache 2.2.17 e o MySQL 5.5.8. Apenas por risos eu decidi benchmark meu servidor dev e corri para um possível problema de configuração

Se eu executar ab -k -n 1000 -c 50 http://myproductionserver.com/something/restful através da CLI do Windows, normalmente fico parado entre 300-700 solicitações. O erro diz "apr_socket_recv: Uma conexão existente foi forçosamente fechada pelo host remoto. (730054). Total de pedidos X concluídos."

Eu imaginei que iria verificar meus logs de erro do Apache. Não ajuda. Aqui está o erro que invoquei com ab:

[Fri Feb 24 17:23:27 2012] [notice] Parent: child process exited with status 255 -- Restarting.
[Fri Feb 24 17:23:27 2012] [notice] Apache/2.2.17 (Win32) PHP/5.3.5 configured -- resuming normal operations
[Fri Feb 24 17:23:27 2012] [notice] Server built: Oct 18 2010 01:58:12
[Fri Feb 24 17:23:27 2012] [notice] Parent: Created child process 768
[Fri Feb 24 17:23:28 2012] [notice] Disabled use of AcceptEx() WinSock2 API
[Fri Feb 24 17:23:28 2012] [notice] Child 768: Child process is running
[Fri Feb 24 17:23:28 2012] [notice] Child 768: Acquired the start mutex.
[Fri Feb 24 17:23:28 2012] [notice] Child 768: Starting 64 worker threads.
[Fri Feb 24 17:23:28 2012] [notice] Child 768: Listening on port 80.

Então, quando cheguei em casa, fiz o mesmo teste usando meu ip local, pensando que poderia ser um problema de rede. A mesma coisa aconteceu. Eu tenho procurado por um bom tempo com muitas respostas. Eu encontrei um problema muito semelhante ea resolução foi usar "Win32DisableAcceptEx" no arquivo httpd.conf dizendo que o problema é realmente um bug com .dlls PHP. Eu desativei todos eles, mas o MySQLi básico. Como você pode ver nos registros acima, nenhum deles fez muita coisa.

Alguém tem alguma ideia? Estou seriamente batendo o servidor com 1000 pedidos? Deixe-me saber se você precisar de mais informações! Eu sei que é apenas um servidor de desenvolvimento sentado em casa, mas imita meu servidor de produção. Preciso ter isso resolvido antes de seguir em frente. Agradeço a ajuda!

    
por Kevin 25.02.2012 / 02:51

1 resposta

3

É provável que você tenha que analisar a configuração MaxClients e o < a href="http://httpd.apache.org/docs/2.2/mod/mpm_common.html#serverlimit"> ServerLimit configurações para sua instância do apache, o que pode ser menor do que você pode esperar para ter certeza de que não é imposto um limite de apache. No entanto, uma rápida olhada nos documentos sugere que o padrão para ambos é 256, o que é menor do que o limite de 50 conexões impostas pelo seu ab.

O servidor está realmente travando, ou seja, você precisa reiniciar o httpd ou ele continua a atender as solicitações quando a carga for removida?

Eu configuraria o loglevel debug e o httpd.conf, e tentaria com menos conexões e total n, e aumentaria o teste. Eu também olharia e veria quais são os valores para RLimitCPU
RLimitNPROC
RLimitMEM

são como também são limites nos quais o apache pode começar a matar processos / threads / conexões, etc.

    
por 25.02.2012 / 03:09