Apache local no Windows XP não está terminando as solicitações de página

1

Eu tenho o Apache 2.2.11 instalado localmente em minha máquina de desenvolvimento do Windows XP (SP3), que eu configurei há cerca de 3 meses.

Acabei de começar a ter um problema estranho nas últimas semanas.

O Apache está servindo alguns aplicativos PHP básicos, como o phpMyAdmin. Quando faço uma solicitação de página, o Apache parece não terminar de exibir todos os recursos para essa página. O Firefox mostra a mensagem "Transferindo dados do nome do servidor ..." e a página nunca é concluída. O mesmo problema acontece no Internet Explorer também.

Às vezes, posso dizer em qual recurso ele está aguardando, porque a maior parte da página será renderizada, exceto por alguma imagem ou recursos semelhantes. (Não tenho certeza porque o Firebug não mostra isso)

Não há o problema de cada solicitação de página - para solicitações de páginas em que a maioria dos recursos é armazenada em cache no meu navegador, a solicitação de página funcionará sem problemas. Ou páginas que são muito leves funcionarão sem problemas.

No entanto, se eu "hard" atualizar a página, terei esse problema (provavelmente porque está solicitando todos os recursos da página)

Alguém sabe o que isso poderia ser?

É tão estranho que tenha apenas começado a acontecer - e eu não fiz nenhuma alteração no meu sistema (que eu saiba)

Eu tentei brincar com a configuração Apache ThreadsPerChild , mas isso não pareceu fazer diferença.

ATUALIZAÇÃO:

Eu tenho feito mais alguns testes. Eu tenho servido o mais básico de páginas, apenas um arquivo HTML simples:

<html>
<body>
    <h1>testing</h1>
</body>
</html>

Se eu solicitar esta página várias vezes seguidas, E cada solicitação ocorrer imediatamente após a conclusão anterior, em seguida, 50% do tempo será encerrado.

No entanto, se eu colocar uma lacuna de 1-2 segundos entre as solicitações, não haverá problema.

Isso se correlaciona com o que observei quando o navegador solicita uma página de aplicativo real. Quando o navegador não tem nada armazenado em cache, todos os recursos da página são solicitados do navegador em um curto período de tempo - isso parece desencadear o problema.

UPDATE2:

Nathan Long me ajudou a entender o problema um pouco melhor com a página de status do servidor (veja abaixo).

É estranho, é como se o servidor tivesse um hickup enviando dados para o cliente. O cliente fica lá esperando para sempre pelos dados que nunca chegam. Fechar o processo do cliente não encerra a conexão no servidor - o servidor ainda tem encadeamentos ativos para cada conexão tentada anteriormente, mas eles apenas ficam lá - não enviando nenhum dado e nunca finalizando. (mesmo que o cliente esteja agora fechado) Apenas um reinício do servidor parece terminá-los.

    
por asgeo1 18.12.2009 / 07:25

2 respostas

1

Atualização - fixa!

William Rowe, da lista de e-mails do Apache, me deu a resposta, que aparentemente é uma coisa conhecida.

XP [personal operating system] only supports two simultaneous applications of the TransmitFile API. Please try the 'stock answer' of 'EnableSendfile Off' in your config.

Com essa mudança, esse problema desapareceu para mim.

Resposta Original

Tendo o mesmo problema - usando o Apache 2.2.14 no Windows XP. Eu tive que usar um arquivo HTML estático um pouco mais longo (mas ainda muito básico) para obter o problema de carga, mas isso acontece.

Acabei de ativar a página localhost / server-status usando conf/extra/httpd-info.conf (você também precisa ativar alguns módulos no arquivo de configuração principal) e notei que toda vez que o problema de carregamento acontece, o número de solicitações sendo processadas sobe por 1 e o número de funcionários inativos é reduzido. Isso é verdade mesmo que a 'carga infinita' esteja na própria página de status do servidor - eu pressionei atualizar e carregue com êxito e instantaneamente, com mais uma solicitação sendo processada.

Cada uma das solicitações processadas mostra um status de 'envio de resposta'.

Também ativei ExtendedStatus em httpd.conf e agora vejo informações detalhadas sobre cada solicitação sendo processada. Muitos estão em andamento há vários minutos, e muitos deles transferiram 0,0 kilobytes desde o início.

Não sei o que fazer com isso.

Instruções detalhadas para o status do servidor

Você pode disponibilizar uma página de status do servidor em http://your.server.name/server-status fazendo o seguinte:

1) Ative mod_status e mod_info (para informações adicionais) em httpd.conf

2) Adicione também Include conf/extra/httpd-info.conf OU adicione as seguintes diretivas (que é o que contém httpd-info.conf ):

# Turn on server status
<Location /server-status>
   SetHandler server-status
   Order Deny,Allow
   Deny from all
   Allow from localhost
</Location>

# Enable more status info
ExtendedStatus On

3) Reinicie o Apache e carregue a página de status.

    
por 12.01.2010 / 23:28
0

Verifique seus logs de erros do Apache. Você vê algo como "Processos filho fora de tentar aumentar o número máximo de servidores"? Se assim for, então você está correndo em uma questão de muitas conexões abertas para a máquina.

Você também pode verificar seu PHP para ver se ele tem algum processo de execução longa, se você precisar aumentar o valor de script_timeout no seu PHP.ini.

Verifique também se o seu PHP está registrando erros e se o script em si não está saindo com erros.

Você pode criar um test.html simples com a versão de conteúdo estático da página e ver se ele é carregado corretamente de forma repetitiva; se isso acontecer, não será o Apache (persay).

    
por 18.12.2009 / 09:11