Resolvendo para o host virtual muito lento no Mac OS X Lion

26

Desde a atualização para o Mac OS X Lion (do Snow Leopard), notei que a resolução para um host virtual é muito lenta (entre cerca de 3 segundos). Encontrei várias dicas (por exemplo, não usar o TLD .local) que podem resolver isso, mas elas não se aplicam à minha configuração.

Minha configuração é bastante simples: - Apache 2 (enviado com Lion) - PHP ativado - adicionamos alguns hosts virtuais - pacotes Mail e SMTP Pear instalados

O arquivo hosts do Apache fica assim:

127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost 
fe80::1%lo0 localhost
127.0.0.1   tbi.dev
127.0.0.1   www.tbi.dev
127.0.0.1   test1.tbi.dev
127.0.0.1   test2.tbi.dev
127.0.0.1   psa.dev
127.0.0.1   snd.dev

E o arquivo de hosts virtuais do Apache fica assim:

<VirtualHost *:80>
    DocumentRoot "/Users/Bart/Sites/tbi"
    ServerName tbi.dev
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Users/Bart/Sites/tbi"
    ServerName tbi.dev
    ServerAlias *.tbi.dev www.tbi.dev
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Users/Bart/Sites/psa"
    ServerName psa.dev
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Users/Bart/Sites/sandbox"
    ServerName snd.dev
</VirtualHost>

A configuração é basicamente idêntica à minha no Snow Leopard, mas o desempenho do Apache para resolver hosts virtuais é significativamente diferente. Eu executo o Mac OS X Lion 10.7.2, mas o problema já estava presente ao executar o 10.7.1.

Isso pode parecer um problema pequeno, mas quando você está acessando um host virtual algumas centenas de vezes por dia, isso resulta em uma perda significativa de tempo, como você pode imaginar.

Bart Jacobs
fonte
Não vejo nada na descrição do problema que exclua problemas comuns como carga do sistema, utilização da rede, utilização da memória. Você diz que a resolução de um host virtual é lenta. De onde? O comando host ou a visualização de uma página veiculada pelo servidor? Se for puramente DNS / host relacionado, você pode cronometrar o desempenho como este na linha de comando: Tempo anfitrião snd.dev
labradort

Respostas:

22

O tempo limite do DNS longo é quase sempre um sinal de problemas de IPv6.

Você precisa de conectividade IPv6 para o apache?

Caso contrário, sugiro alterar

<VirtualHost *:80>

para dentro

<VirtualHost 0.0.0.0:80>

Ou desative completamente a conectividade IPv6.

adaptr
fonte
3
+1: as pesquisas de DNS do ipv6 são um grande problema no OSX. Por alguma razão obscura, o OSX faz primeiro a pesquisa do ipv6. Se o tempo limite expirar (aproximadamente 30 segundos), continuará com a v4. O OSX parece não verificar o / etc / hosts primeiro na v6, mas na v4, mas somente após o tempo limite da v6. Se você não pode desativar melhor a v6, verifique se possui uma configuração da v6 totalmente funcional, incluindo o DNS da v6.
Tonny
Obrigado pela resposta. Não tenho certeza se esse é o único problema que está desempenhando um papel aqui, mas o tempo necessário para resolver um host virtual local caiu na maioria das vezes.
22411 Bart Barton
Minha pesquisa de DNS estava demorando cerca de 2 a 5 segundos para ser resolvida, não 30. Portanto, não tenho certeza de qual era o meu problema, pois é improvável que esse seja um tempo limite. Independentemente disso, agora é instantâneo desde que você fez as alterações nesta resposta.
11747 Justin
22

Também já me deparei com isso agora.

Isso definirá o IPv6 na configuração de rede como Desligado ...

# list all network interfaces to get their names
networksetup -listallnetworkservices
# disable the one you want, in my case it's WiFi
networksetup -setv6off Wi-Fi

Mas .. infelizmente isso não resolveu o problema de resolução do DNS para mim (talvez após a reinicialização do sistema). O que realmente ajudou foi adicionar IPs no estilo ipv6 ao / etc / hosts como este:

# my original /etc/hosts ...
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1             localhost 
fe80::1%lo0 localhost

127.0.0.1 project.local

# adding this solved resolving:
fe80::1%lo0 project.local

O wget http: //project.local agora é exibido instantaneamente

Resolving project.local... 127.0.0.1
Connecting to project.local|127.0.0.1|:80... connected.

em vez de travar por 5 segundos em Resolving project.local.

Dalibor Filus
fonte
Seu conselho era tudo o que eu precisava - apenas adicionei as entradas IPv6 ao meu arquivo de hosts junto com o padrão 127.0.0.1e o problema foi completamente resolvido.
Kirk Woll
Yay! Isso ajuda no OS X 10.8 (Mountain Lion). Depois de atualizar do 10.6 diretamente para o 10.8, encontrei minhas pesquisas de host local também para sempre ... como se estivessem expirando antes de resolver. Isso corrigiu o problema para mim. Obrigado!
Lothar_Grimpsenbacher
Encontrei esse problema recentemente e as entradas do IPv6 no / etc / hosts o corrigiram perfeitamente.
Neil Albrock 20/10/12
funciona agora para mim no Max OS 10.10.1
ezmilhouse 31/03
10

No MacOSX, o .local domínio Lion foi "reservado" para o Resolver Multicast DNS (bonjour).

Isso significa que procurar qualquer domínio que termine com .local resultará na pesquisa de mDNS (até 5s) antes do / etc / hosts.

Conserta:

  1. Altere seus domínios de teste para outro TLD (ou seja .dev)
  2. Use a ferramenta dscl para adicionar uma exceção.
Artur Bodera
fonte
Funcionou para mim também ... estava me deixando louco porque apenas alguns dos meus sites de desenvolvimento fizeram isso ... baixo e eis ... todos os que terminam em .local! isso não começou a acontecer comigo até que eu atualizei para High Sierra ... graças a @artur
Mfoo 28/02
1
dsclestratégia de exceção é bastante bacana. @ artur-bodera seu link expirou, mas eles arquivados seu antigo blog no github github.com/icebourg/itandme-archive/blob/master/posts/2011/08/...
lkraav
Observe também que .local é um padrão proposto com a IETF: tools.ietf.org/html/rfc6762 Também é realmente uma boa idéia registrar um nome de domínio se você precisar de um domínio de "teste", pois você obtém controle total de como configurado no DNS. A criação de um nome de domínio provavelmente causará conflitos estranhos com outras partes do sistema de domínio (como o mDNS nesse caso).
James Tikalsky
3

Dê uma olhada neste blog para ver se ajuda, destacando especificamente o Problema 2:

Aparentemente, o terminal e algumas das ferramentas do BSD Unix usam corretamente o /etc/resolv.conf e a ordem correta dos / etc / hosts primeiro e, em seguida, os servidores DNS. No entanto, tudo o mais no OS X Lion, incluindo todos os seus aplicativos, faz isso ao contrário!

DTest
fonte
1

Funciona.

Eu uso essa solução

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost6
fe80::1%lo0 localhost
hipnose
fonte
1

O mesmo bug no Mavericks.

Resolvido quando coloco minhas definições de hosts locais no início de /etc/hosts, desta forma:

127.0.0.1 localhost project1.dev project2.dev
127.0.0.1 project3.dev project4.dev
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost
sviriden
fonte
0

Eu tentaria mudar:

::1             localhost 
fe80::1%lo0 localhost

para

::1             localhost6 
fe80::1%lo0 localhost6
Forma de vida alienígena
fonte
1
Infelizmente, isso não resolve o problema. Você pode dizer qual é a lógica por trás da sua sugestão? Obrigado pela sua resposta.
Bart Jacobs
Recentemente, lutei de forma extraordinária por respostas snmp de máquinas que não executavam IPV6, mas que tinham entradas semelhantes em / etc / hosts. Agora, o que vem à mente é o tempo limite do servidor de nomes - um pouco estranho, porque os hosts devem ter precedência sobre o bind. (Configurável, é claro).
Formulário de vida alienígena
Muito estranho mesmo. Em algumas ocasiões, a resolução para um host é instantânea (como se espera) e, em outros, pode levar alguns segundos.
Bart Jacobs