Múltiplos processos do php-cgi.exe no IIS

2

O servidor de produção executa um aplicativo PHP no IIS 6.0. Durante os horários de pico, tivemos alguns problemas em que os processos do php-cgi.exe aumentam em número e se aproximam de 200. O servidor é rastreado e temos que reiniciar o servidor várias vezes para restaurar o comportamento normal. Quando o servidor está funcionando normalmente, notei que existem apenas 10-15 processos php-cgi.exe no gerenciador de tarefas.

O que poderia fazer com que os processos do php-cgi.exe aumentassem em número de 10-15 para cerca de 200 durante as horas de pico? Onde devo procurar uma causa?

    
por Marcel Janus 19.10.2011 / 17:31

4 respostas

4

O IIS6 CGI normalmente é de 1 solicitação - > 1 processo. 15 processos simultâneos de PHP-CGI provavelmente são devidos a 15 solicitações simultâneas de PHP-CGI. Ou você tem um alto índice de interrupções nos processos do PHP, e eles simplesmente não estão saindo corretamente.

No Windows, a inicialização do processo não é tão barata quanto no * nix (foi-me dito); Os encadeamentos do Windows são leves e podem ser simplesmente desenvolvidos nos processos, mas iniciar um processo é caro.

Iniciar um novo processo para cada solicitação recebida pode variar de "caro" a "desastroso". Pode ser simplesmente que sua carga seja aumentada quando você vir 200 processos simultâneos - ou seja, você tem 200 solicitações pendentes "em voo". Em algum momento, o desempenho cairá para onde o novo trabalho está chegando mais rápido do que o antigo trabalho pode ser concluído, e se você está reiniciando o servidor para lidar com isso, você está apenas punindo os usuários. Quem pode fazer outra solicitação imediatamente para tentar novamente.

Se seus processos estiverem ociosos, seu aplicativo também poderá ter um bug de suspensão. Mas isso é por.

Anyhoo, isso é tudo uma maneira prolixa de chegar: Você já tentou FastCGI? link

O FastCGI no IIS permite a reutilização de um pool existente de processos que não saem, portanto, em vez de um pedido iniciar, processar e sair de um novo processo, cada solicitação é distribuída para um conjunto de processos de trabalho em execução (neste caso) -CGI.

Cada instância do PHP-CGI é mantida ativa, enquanto mais de 1.000 solicitações são transferidas, e depois é permitido sair, e um novo é iniciado em seu lugar. Da memória, há um grupo de processos que fazem isso simultaneamente para manipular solicitações simultâneas (podem ser 4, 5 ou 10 por padrão, configuráveis) e o desempenho deve ser (muito) melhor.

    
por 27.10.2011 / 07:37
1

Tudo é baseado na largura de banda.

Cada conexão cria uma nova instância de php-cgi.exe

Então, mais usuários = mais instâncias de php-cgi.exe

    
por 19.10.2011 / 17:33
1

Você realmente não deveria estar usando o IIS6 com PHP, ele não é muito bem suportado. Considere mudar para o IIS 7.5.

Como os processos (vs threads) exigem muitos recursos, seu sistema está ocupando toda a RAM disponível quando você tem 200 processos php-cgi em execução.

Tente definir maxInstances para 10 * o número de processadores de CPU que você tem.

Isso limita a quantidade de processos CGI que podem ser transferidos.

Além disso, como alternativa ao IIS com PHP que é puramente baseado em CGI, você pode usar um pacote WAMP que usa PHP como um módulo do Apache (baseado em thread). Isso reduzirá bastante os recursos consumidos e geralmente pode manipular mais conexões. Eu uso um chamado WampDeveloper Pro que está pronto para produção e suportado. Há também o XAMPP e o WAMPServer que são gratuitos, mas podem não ser o melhor em um ambiente de produção.

    
por 20.10.2011 / 17:35
0

Ele será executado uma vez para cada script que precisar ser executado. São horas de pico ... são usuários do seu site.

Otimize seus scripts para cuidar disso.

    
por 19.10.2011 / 17:33

Tags