Jvm leva muito tempo para resolver o endereço IP do host local

112

Parece que tenho um problema com o desempenho do "teste sbt" (que inclui a pesquisa de nomes de host local / endereços IP) após a atualização para o macOS Sierra. Em uma versão anterior do OS X, demorava cerca de 40-50 segundos para terminar. Os tempos do macOS Sierra são muito maiores do que isso. A última corrida que fiz durou cerca de 15 minutos. Os tempos de compilação são quase os mesmos de 'El Capitan'.

Sou o único da minha equipe a experimentar este novo macOS, então não posso dizer se ele está acontecendo apenas no meu mac ou se é um problema universal.

Meu colega teve um problema semelhante no Ubuntu e estava relacionado com a geração de números aleatórios tornando os testes mais lentos - Tempos de resposta de serviço lentos: Java SecureRandom & / dev / random

Infelizmente, isso não funcionou para mim. Originalmente tentei fazer isso no JDK 8u54 e depois tentei atualizar para o JDK 8u102 e não ajudou muito.

PS Estou executando o Macbook Pro Mid-2015 2.8 GHz i7, 16 GB de RAM, SSD de 1 TB.

Tomasz Mikuś
fonte
Estou usando gradle clean teste tendo o mesmo problema.
Max Peng de
Este é o bug relatado ao OpenJDK: bugs.openjdk.java.net/browse/JDK-8143378 Ele foi resolvido como uma duplicata de outro bug que não será corrigido. Provavelmente deve ser reaberto.
Lóránt Pintér

Respostas:

326

Eu tive o mesmo problema. O Tomcat passou de 15 segundos para 6 minutos para inicializar o contexto do spring após a atualização ... desabilitar csrutils não resolveu o problema para mim.

I resolvido o problema adicionando o meu hostname Mac (ou seja Macbook.local, ou qualquer que seja o seu Mac é chamado) no /etc/hostsarquivo mapeado para o 127.0.0.1endereço, bem como o ::1assim:

127.0.0.1   localhost mbpro.local
::1         localhost mbpro.local

Se estiver interessado, você pode encontrar alguns detalhes sobre o problema e a solução aqui: https://thoeni.io/post/macos-sierra-java/

Na postagem, também incluo um link para um projeto do github para ajudar a solucionar o problema e validar a solução.

O problema está relacionado (acredito) em como funciona a resolução de nome de host local e como a classe java.net.InetAddr está recuperando os endereços. Verifiquei com poucos colegas e aparentemente isso não acontece com todos que atualizaram para o Sierra, mas ainda estou investigando as raízes dessa mudança.

De qualquer forma, a solução foi a mesma que o antid0te implementou e funcionou imediatamente.

thoeni
fonte
Mesmo problema ... E posso confirmar que desativar o SIP também não funcionou para mim.
Borges
Ótimo, funciona, você pode verificar com o projeto do github github.com/thoeni/inetTester
christmo
21
Encontrei! Não é o nome mac .. Seu nome de host. Digitando "hostname" no terminal pode dar o nome de host correto.
VK321 de
1
Ainda vendo isso no OSX 10.14.2, anos depois. Muito obrigado pela correção.
Malcolm Crum
1
macOS Mojave 10.14.4, ainda é um problema. Anexando o nome do host após as localhostlinhas de loopback IPv4 e IPv6 ( 127.0.0.1, ::1) correção ainda verificada!
Cachorro de
43

Resposta correta: Jvm leva muito tempo para resolver o endereço IP do host local

Para os preguiçosos:

sudo sed -i bak "s^127\.0\.0\.1.*^127.0.0.1 localhost $(hostname)^g" /etc/hosts
sudo sed -i bak "s^::1.*^::1 localhost $(hostname)^g" /etc/hosts
sudo ifconfig en0 down
sudo ifconfig en0 up
camikiller
fonte
4
Impressionante! Isso aumentou meu tempo de lançamento do minecraft de 12 segundos para 0,5 segundos.
Bob
@camikiller Estou vendo 2 valores diferentes para hostname vs Sharing> Computer Name, por favor, esclareça qual usar?
vikramvi
A melhor solução é atualizar seu MacOS @vikramvi
camikiller
@camikiller mais tarde eu fiz por apple.stackexchange.com/questions/66611/… , ter o mesmo nome, mas ainda não está funcionando. Eu preciso fazer algumas outras configurações no compartilhamento?
vikramvi
@vikramvi Tente editar manualmente seu /etc/hostsarquivo e adicionar os 2 hosts
camikiller
6

Eu tenho o mesmo problema. Meu aplicativo de inicialização rápida leva 60 segundos para iniciar no Sierra contra 25 segundos no Yosemite.

Durante a depuração, percebi que o problema vem de InetAddress.getLocalHost (). Eu mudei meu arquivo host para adicionar meu hostname para 127.0.0.1 e :: 1 e agora o aplicativo inicia tão rápido quanto antes.

Antid0te
fonte
2
Olá, achei esta explicação de alto nível, se isso ajudar (mas ainda não está claro o que mudou na versão MacOS Sierra): "Quando você solicita um nome de host, o JDK o resolve para endereços IP. Em seguida, ele tenta uma pesquisa reversa desses endereços e verifica se pelo menos um dos resultados é mapeado de volta para o nome do host de entrada. É essa pesquisa reversa que é lenta. A lentidão não se limita à JVM. Qualquer coisa no sistema operacional que tente realizar essa pesquisa reversa será lenta sem configuração apropriada em / etc / hosts. " (de github.com/spring-projects/spring-boot/issues/7087 )
thoeni
3

Ativar, por exemplo, Preferências do sistema> Compartilhamento> Login remoto, resulta na atribuição automática de um endereço IP ao nome do host.

Como as pessoas estão vendo problemas após a atualização, faz sentido supor que 10.12 mudou a forma como o nome do host é resolvido, ou seja, pelo menos com 10.11 o nome do host é sempre resolvido, enquanto com 10.12 ele é resolvido apenas se um serviço for habilitado em Preferências do Sistema> Compartilhando (alguém com 10.11 pode confirmar isso).

Jurajw
fonte
Eu tenho 10.12.5, mas sua solução não funcionou. Qual versão você tem ?
vikramvi
@vikramvi Tenho 10.12.6 e para minha instalação as coisas ainda funcionam conforme descrito. Com um arquivo / etc / hosts padrão e compartilhamento desabilitado, o ping $ (hostname) falha com um erro de host desconhecido. Com o compartilhamento habilitado, o nome do host é resolvido para o IP da minha VLAN. Quanto ao Java (8u141), chamar InetAddress.getLocalHost () leva 5s em caso de compartilhamento desabilitado. Com o compartilhamento habilitado, o tempo de execução cai para 13ms.
jurajw
Isso funciona (embora seja muito estranho), basicamente, mesmo se o "Login Remoto" já estiver marcado, desmarque-o e marque-o novamente. As coisas começam a funcionar novamente. Você tem que fazer isso uma vez / boot LOL. Observe também que, se você já matou o processo "mDNS" (anteriormente), precisará fazer este truque para trazer de volta endereços .locais. Ou use o método / etc / hosts para uma correção mais permanente
rogerdpack
1

Acho que é um problema geral com o novo sistema operacional. Eu tenho um problema semelhante: tenho um aplicativo da web que é implantado no tomcat. No El Capitan ele inicializou em 10 segundos, agora leva 95 segundos e o cliente (um aplicativo de desktop baseado em Swing) não pode se conectar a ele (ou pelo menos demorou muito). Acho que é algo relacionado à comunicação de rede, porque um aplicativo de console de teste simples funciona bem.

Andras Gyetvan
fonte
1
Desligar o SIP resolve meu problema. macossierra-slow.com/…
Andras Gyetvan
1

Foi um problema estranho depois de instalar a atualização para Mac Sierra 10.12 (16A323). No arquivo hosts com o seguinte classificou o problema.

::1         localhost <myhostname>.local   <--- Was already present
127.0.0.1   localhost <myhostname>.local   <--- Solved the tomcat loading issue

Você pode obter o myhostname por comando $hostnameem qualquer lugar no terminal.

Sidd Gautama
fonte
0

A resposta aceita me ajudou! Apenas adicionando isso aqui explicando o que acho que o problema para mim era:

Meu nome de host era algo como "Meu Mac", que não pôde ser resolvido. Nas configurações, ele me mostrou que o computador pode ser endereçado com mymac.local

Achei que fosse o espaço e renomeei meu mac para "my.mac", mas mesmo isso não ajudou, pois o dns adicionado automaticamente ainda era mymac.local

Adicionar my.mac ao / etc / hosts ajudou então.

Então, meu palpite é qual é o problema real: isso só acontece quando o nome do seu computador contém algo que não seja uma letra. Isso é removido automaticamente pelo sistema operacional e, em seguida, o nome do host e a entrada dns não correspondem. (que pode ser corrigido ao adicioná-lo manualmente)

Arne
fonte
1
Acho que o problema é mais profundo do que isso ... meu nome de host era todo composto de letras alfa normais, mas adicioná-lo a / etc / hosts resolveu uma série de problemas estranhos para mim
Magnus
0

Eu tive o mesmo problema no meu Mac.

Quando mudei meus nomes de host principal e Bonjour para conter apenas caracteres alfanuméricos, resolvi o problema. A ideia veio de um colega que leu o conselho em algum lugar quando estava enfrentando um problema semelhante (ele não conseguia se lembrar onde).

Inspirando-me neste guia, estas foram as etapas que segui:

Primeiro, altere o nome do host principal

sudo scutil --set HostName <new host name>

por exemplo:

sudo scutil --set HostName eggsandwich

Em seguida, altere o nome do host Bonjour (para estar completo, nunca tentei sem essa etapa, então pode ser que não seja necessária).

sudo scutil --set LocalHostName <new host name>

por exemplo:

sudo scutil --set LocalHostName eggsandwich

Agora reinicie os processos java com os quais você estava tendo problemas e, com sorte, eles não devem mais travar.

Por outro lado, isso também resolveu outro problema que eu tinha, em que uma nova guia no Terminal não iniciava o bash no mesmo diretório, apesar das minhas preferências. Não tenho explicação de por que isso aconteceu, mas estou muito satisfeito.

Erik Madsen
fonte