Por que a resposta no localhost é tão lenta?

59

Estou trabalhando em um pequeno projeto PHP para um amigo meu e tenho uma configuração de ambiente WAMP para desenvolvimento local. Lembro-me dos dias em que a resposta do meu Apache 2.2 local foi imediata. Infelizmente, agora que voltei de um feriado prolongado, acho as respostas localhostdolorosamente lentas.

Demora cerca de 5 segundos para obter uma página HTML de 300B.

Quando olho para o gerenciador de tarefas, os httpdprocessos (2) estão usando 0% da CPU e, em geral, meu computador não está carregado (0-2% de uso da CPU).

Por que a latência é tão alta? Existe alguma configuração do Apache que eu possa ajustar para talvez fazer com que seu thread seja executado com uma prioridade mais alta ou algo assim? Parece que está simplesmente dormindo antes de servir a resposta.

Peter Perháč
fonte
11
A localhostresolução está correta no DNS? ping localhostdeve voltar instantaneamente com 127.0.0.1.
Alexis Lê-Quôc 17/09/09
que funciona bem, a resposta recebida em <1ms
Peter Perháč
Eu pensei que o Firefox poderia ser o problema, mas leva 5s mesmo no IE, por isso deve ser alguma configuração do sistema ou configuração do Apache ou gremlins.
Peter Perháč
2
Ele tem o mesmo comportamento ao solicitar conteúdo estático (ou seja, ao carregar http://localhost/index.html)? Caso contrário, pode ser um problema de PHP, não um problema do Apache.
Marcus Spiegel
5
O que as muitas e variadas respostas a essa pergunta mostram é que existem dezenas, senão centenas, de razões diferentes para que as solicitações de páginas sejam lentas. Se você chegou a esta pergunta porque também possui solicitações de páginas lentas, precisará aprofundar-se na causa da lentidão antes de obter uma resposta útil aqui. stracee tcpdumpsão ferramentas úteis para isso.
Ladadadada

Respostas:

59

Para mim, definir a ServerNamepropriedade em httpd.confconsertou os atrasos (no máximo 10 segundos):

# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
ServerName 127.0.0.1:80
sshow
fonte
12
Isso funciona - gostaria de poder
votar novamente
8
Isso corrige para mim também! Passou da latência de 10s para 2ms!
JavaScript é necessário
Eu lutei por horas e essa era a solução.
Williamcarswell
11
por que isso é um problema se o localhost resolver corretamente? o que está acontecendo nesses 10 segundos antes de responder? esperando o tempo limite em algum lugar?
Milão
3
@ Elipticalview Como o comentário no arquivo diz; If your host doesn't have a registered DNS name, enter its IP address here.
Sshow 10/03/2014
21

Eu tive o mesmo problema.

Definir o redirecionamento de host local para 127.0.0.1 no arquivo hosts não ajudou. A otimização do servidor MySQL não ajudou (InnoDB -> MyISAM, alterando muitas diretivas relacionadas ao cache no my.ini).

Então usei o webgrind da web e reduzi o problema para a chamada "nova DOP (...)". Mudando

mysql:host=localhost;dbname=dp-ui;charset=utf8 

para

mysql:host=127.0.0.1;dbname=dp-ui;charset=utf8

no DSN para DOP resolveu completamente o problema ! O tempo de carregamento da página passou de mais de 3000 ms para 16ms .

No entanto, estou realmente confuso por que a linha "127.0.0.1 localhost" no arquivo hosts não ajudou.

michalko
fonte
3
Alguém pode me dizer qual arquivo devo editar para fazê-lo funcionar?
Giri
11
Você deve editar a linha em que está se conectando ao banco de dados (no seu script PHP). Por exemplo, altere a linha: $link = new PDO('mysql:host=localhost;dbname=dp-ui;charset=utf8');para $link = new PDO('mysql:host=127.0.0.1;dbname=dp-ui;charset=utf8');
michalko
Eu estava trabalhando em um aplicativo EXT-JS recentemente e tem um enorme problema de consultas de dados MYSQL demorando muito para responder. MYSQL era basicamente muito lento. Graças a Deus, tenho a resposta aqui ..... apenas mudei meu host no script de conexão de: host = localhost; to host = 127.0.0.1 As respostas do meu servidor passaram de 3 minutos (180 segundos) para menos de 1 segundo. Muito obrigado.
User184985
Isso resolveu meu problema. Estranho ... Eu não notei esse problema em SQLite
Mladen Janjetovic
2
O mesmo para mim, mas apenas para o WordPress. Teve que substituir "localhost" com "127.0.0.1" em wp-config.php
Adrian
20

O problema estava no arquivo de configurações principais do Apache httpd.conf.

Eu achei isto:

Existem três maneiras de configurar o PHP para funcionar com o Apache 2.x no Windows. Você pode executar o PHP como manipulador, como CGI ou no FastCGI. [Fonte]

Então, entrei nas configurações do Apache e vi onde estava o problema: configurei-o como CGI, em vez de carregá-lo como um módulo. Isso causou php-cgi.exea inicialização e o desligamento toda vez que eu fazia uma solicitação. Isso estava atrasando meu localhostdesenvolvimento.

Alterei as configurações para carregar o PHP como um Apache MODULE e agora tudo funciona perfeitamente. :)

Para carregar o módulo PHP para Apache 2.x:

1) insira as seguintes linhas no httpd.conf

LoadModule php5_module "c:/php/php5apache2.dll"

AddHandler application/x-httpd-php .php

(ps mude C:/phppara o seu caminho. Além disso, mude php5apache **. dll para o nome do arquivo existente)

2) Para limitar a execução do PHP apenas para arquivos .php, adicione isto em httpd.conf:

<FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch>

3) defina o caminho do php.ini httpd.conf(se após a reinicialização você receber um erro, remova esta linha novamente)

PHPIniDir "C:/php"

Obrigado a todos por seus esforços.

Peter Perháč
fonte
2
Meu Apache pára de adicionar as linhas, conforme mencionado na Fonte. Como eu faço no Windows?
AgA 02/04
esse link expirou. Use isto: goo.gl/2EVth9
T.Todua
7

Eu tive o mesmo problema e finalmente descobri que isso vinha de dois fatos:

  1. Eu uso o Mac OS X Mavericks
  2. Acessei meu projeto através da URL http://myproject.local/porque eu coloquei uma linha 127.0.0.1 myproject.localem/etc/hosts

O problema aparece porque o .localtld está reservado para o serviço Bonjour, e isso desde o Mac OS X Lion (10.7).

Mudar o tld por outra coisa resolveu o problema.

lepix
fonte
6

Verifique se /etc/hostsestá correto. Como isso:

# hostname mobrglnx1 added to /etc/hosts by anaconda

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 *****

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 *******

No local, ****dê seu nome de host.

morfeu
fonte
Foi o caso para mim. Meu domínio foi definido na linha ipv4, mas não no ipv6.
Rafael Beckel
O mesmo para mim. As solicitações demoraram> 5 segundos antes de eu colocar a linha adicional em / etc / hosts. Agora minhas coisas funcionam em ~ 0,1 seg.
mwallisch
Coloque-me na direção certa. Adicionado 127.0.0.1 something.atmy.localhoste agora a solicitação não leva mais 20 segundos. Em vez disso, o apache local responde imediatamente. Não sei muito sobre redes. Eu acho que o nome do domínio é resolvido muito lentamente, porque algo não está configurado corretamente.
robsch
4

Em sua httpd.confcertifique-se de definir a configuração HostnameLookups Off.

drAlberT
fonte
6
parece que não tenho um arquivo apache.conf, também procurei pela diretiva HostnameLookups em todos os arquivos e a encontrei no arquivo de manual core.html.en. Ele disse que é Off por padrão, então eu acho que ele está fora
Peter Perháč
3

Caso isso ajude alguém, eu tive esse problema e ele se resumiu a ser uma pesquisa de DNS incorreta .

O servidor DNS no servidor foi definido como 127.0.0.1- eu mudei para usar os servidores DNS públicos do Google, e isso tornou a pilha muito mais rápida.

Toby Allen
fonte
2

A pergunta tem uma tag apache-2.2, mas se alguém for afetado por esse problema nefasto também no WAMP com Apache 2.4 + PHP 5.5 , a seguinte resposta no SO fez o truque para mim:

edite httpd.confe desative o carregamento do módulo CGI comentando esta linha:LoadModule cgi_module modules/mod_cgi.so

https://stackoverflow.com/a/18786773/260080

Marco Demaio
fonte