O Apache 2.4 no Windows responde lentamente, trava ao servir algumas páginas dinâmicas

27

(Eu sei a resposta a esta pergunta. Postando isso apenas para compartilhar a resposta com a comunidade)

Minha instância local do Apache 2.4 (Windows 7) experimenta atrasos ou desligamentos ao veicular alguns URLs, dependendo do navegador que eu uso para acessar esses URLs .

Com o Firefox / Chrome, o Apache está lento para responder em determinados URLs. A lentidão ocorre cerca de 20% do tempo em qualquer URL. Quando isso ocorre, há um atraso de 5 segundos durante o qual o Firefox exibe um status "Aguardando ...".

Com o Internet Explorer 9, o Apache simplesmente trava e para de atender a qualquer solicitação (com qualquer navegador) até que seja reiniciado.

  • Isso parece ocorrer apenas com solicitações dinâmicas (PHP), mas não todas. Na verdade, isso ocorre apenas em um site específico. Outros sites baseados em PHP na mesma máquina funcionam bem.
  • Pode ou não ser significativo que o site problemático consista em um grande número de subdomínios (VirtualHosts).
  • Desativar o Firewall do Windows e o Comodo Firewall não ajuda.
  • O problema parece mais frequente com páginas "mais ocupadas" (solicitações adicionais para IFRAMES etc.)

Eu tentei muitas alterações em httpd.conf (como desabilitar KeepAlive, EnableMMAP, HostnameLookups), mas nada parece funcionar.

    
por Tomasz P. Szynalski 07.12.2012 / 03:28

2 respostas

32

Respondido por Thomasz

A solução é adicionar o seguinte ao seu httpd.conf :

AcceptFilter http none
AcceptFilter https none

No Windows, isso tem o efeito de desativar a API AcceptEx () (parte do WinSock), que oferece algumas melhorias de desempenho, mas provavelmente entra em conflito com o Comodo Firewall.

Colocar o Comodo Firewall no modo "Desabilitado" não ajuda, pois os pedidos provavelmente ainda passam pelo código de rede do Comodo. Eu acho que o Comodo teria que ser desinstalado completamente para eliminar o problema (embora eu não tenha tentado).

Se você tiver um problema parecido com o Apache 2.2, use a diretiva Win32DisableAcceptEx.

Referências

Citações do link :

The default values on Windows are:

AcceptFilter http data

AcceptFilter https data

Window's mpm_winnt interprets the AcceptFilter to toggle the AcceptEx() API, and does not support http protocol buffering. There are two values which utilize the Windows AcceptEx() API and will recycle network sockets between connections. data waits until data has been transmitted as documented above, and the initial data buffer and network endpoint addresses are all retrieved from the single AcceptEx() invocation. connect will use the AcceptEx() API, also retrieve the network endpoint addresses, but like none the connect option does not wait for the initial data transmission.

On Windows, none uses accept() rather than AcceptEx() and will not recycle sockets between connections. This is useful for network adapters with broken driver support, as well as some virtual network providers such as vpn drivers, or spam, virus or spyware filters.

Veja também: link

    
por 02.08.2013 / 19:28
-1

Estou executando o Apache 2.4.16 em uma caixa do Windows 7 Pro e meu site parou de funcionar há duas semanas. Adicionando isso resolveu o problema.

ServerRoot "C:/Program Files (x86)/Apache Software Foundation/Apache2.4"

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to 
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen XX.XX.XX.XX:80
Listen 80
AcceptFilter http none
AcceptFilter https none
    
por 06.03.2016 / 16:33