Jvm需要很长时间才能解析localhost的IP地址


112

升级到macOS Sierra后,“ sbt测试”(包括查找本地主机名称/ IP地址)的性能似乎出现问题。在OS X的早期版本中,大约需要40-50秒才能完成。macOS Sierra时间远不止于此。我上次跑步大约是15分钟。编译时间与“ El Capitan”上的时间大致相同。

我是团队中唯一尝试此新macOS的人,因此我无法确定它是否仅在我的Mac上发生,还是普遍存在。

我的同事在Ubuntu上也有类似的问题,这与生成随机数有关,这减慢了测试的速度- 服务响应速度慢:Java SecureRandom和/ dev / random

不幸的是,这对我没有用。最初,我在JDK 8u54上进行了尝试,然后尝试更新为JDK 8u102,但这样做也没有帮助。

PS我正在运行Macbook Pro 2015年中的2.8GHz i7、16GB内存,1TB SSD。


我正在使用gradle clean test并遇到相同的问题。
马克斯·彭

这是报告给OpenJDK的错误:bugs.openjdk.java.net/browse/JDK-8143378已解决,它是另一个无法修复的错误的重复。它可能应该重新打开。
罗兰·品特尔(LórantPintér),

Answers:


325

我有同样的问题。升级后,Tomcat从15秒缩短到6分钟以初始化spring上下文...禁用csrutils不能为我解决问题。

通过/etc/hosts映射到该127.0.0.1地址的文件上添加我的Mac主机名(即Macbook.local或您的Mac称呼)来解决此问题,::1如下所示:

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

如果您有兴趣,可以在这里找到有关该问题和解决方案的一些详细信息:https : //thoeni.io/post/macos-sierra-java/

在帖子中,我还链接到github项目,以帮助解决问题并验证解决方案。

这个问题与(我相信)本地主机名解析的工作方式以及java.net.InetAddr类如何检索地址有关。我与几个同事进行了核实,显然并不是每个升级到Sierra的人都遇到这种情况,但是我仍在调查这种变化的根源。

无论如何,解决方案与antid0te实施并立即生效的相同。


同样的问题...而且我可以确认禁用SIP对我也不起作用。
使

伟大的作品,您可以检查github项目github.com/thoeni/inetTester
christmo

21
找到了!它不是mac名称。它的主机名。通过在终端中键入“主机名”可以提供正确的主机名。
VK321

1
几年后,仍然在OSX 10.14.2上看到了这一点。非常感谢您的修复。
马尔科姆·克鲁姆

1
macOS Mojave 10.14.4仍然是一个问题。之后追加主机名localhostIPv4和IPv6环回线(127.0.0.1::1)还是验证修复!

43

正确答案:Jvm需要很长时间才能解析localhost的IP地址

对于懒惰的人:

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

4
太棒了!这将我的Minecraft发射时间从12秒增加到0.5秒。
鲍勃

@camikiller我在“主机名”和“共享”>“计算机名”中看到2个不同的值,请说明使用哪个?
vikramvi

更好的解决方案是升级MacOS @vikramvi
camikiller

@camikiller之后,我对每个apple.stackexchange.com/questions/66611/…进行了更改,使其具有相同的名称,但仍然无法正常工作。我需要在“共享”中进行其他设置吗?
vikramvi

@vikramvi尝试手动编辑/etc/hosts文件并添加2个主机
camikiller

6

我也有同样的问题。我的spring-boot应用程序在Sierra上需要60秒才能启动,而在优胜美地上则需要25秒。

在调试时,我意识到问题出在InetAddress.getLocalHost()。我更改了主机文件,为127.0.0.1和:: 1添加了主机名,现在应用程序的启动速度与以前一样快。


2
嗨,我发现了这个高级解释是否有帮助(但仍然不清楚MacOS Sierra发行版中的更改):“当您请求主机名时,JDK会将其解析为IP地址。然后尝试对这些地址进行反向查找并检查是否至少有一个结果映射回了输入的主机名。这是缓慢的反向查找。这种缓慢不仅限于JVM。在OS上尝试执行这种反向查找的任何操作都会很慢,而不会在/ etc / hosts中进行适当的配置。” (从github.com/spring-projects/spring-boot/issues/7087
thoeni

3

启用例如系统偏好设置>共享>远程登录,将为主机名自动分配一个IP地址。

由于人们在升级后发现问题,因此有理由假设10.12更改了主机名的解析方式,即,至少使用10.11时,主机名始终被解析,而使用10.12时,只有在“系统偏好设置”>“启用了服务”的情况下,主机名才能解析。分享(使用10.11的人可以确认这一点)。


我有10.12.5,但您的解决方案无效。您有哪个版本?
vikramvi

@vikramvi我有10.12.6,对于我的安装,一切仍然按照所述进行。如果使用标准的/ etc / hosts文件并禁用了共享,则ping $ {hostname)将失败,并出现未知的主机错误。启用共享后,主机名将解析为我的VLAN的IP。对于Java(8u141),在禁用共享的情况下,调用InetAddress.getLocalHost()需要5 秒钟。启用共享后,执行时间降至13ms。
jurajw

确实有效(尽管确实很奇怪),基本上,即使已经选中了“远程登录”,也请取消选中它,然后再次进行检查。事情再次开始起作用。您必须执行一次/启动LOL。另请注意,如果您曾经杀死过“ mDNS”进程(更早),则需要执行此技巧以完全恢复.local地址。或使用/ etc / hosts方式进行更永久的修复
rogerdpack

1

我认为这是新操作系统的普遍问题。我有一个类似的问题:我有一个部署到tomcat的Web应用程序。在El Capitan上,它的启动时间为10秒,现在需要95秒,并且客户端(基于Swing的桌面应用程序)无法连接到它(或者至少花费了很多时间)。我认为这与网络通信有关,因为一个简单的测试控制台应用程序运行良好。


1
关闭SIP解决了我的问题。macossierra-slow.com/...
安德拉斯Gyetvan

1

将更新安装到后,这是一个奇怪的问题Mac Sierra 10.12 (16A323)。在下面的hosts文件中对问题进行了排序。

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

您可以通过命令在终端中的任何位置获取myhostname$hostname


0

接受的答案帮助了我!只需在此处添加说明我对我的问题是:

我的主机名类似于“我的Mac”,无法解析。在设置中,它显示了可以使用mymac.local寻址的计算机

我以为是空间,将我的mac重命名为“ my.mac”,但是即使这样也无济于事,因为自动添加的dns仍然是mymac.local

然后将my.mac添加到/ etc / hosts即可。

因此,我猜测实际的问题是什么:仅当您的计算机名称包含非字母的任何内容时,才会发生这种情况。操作系统会自动将其删除,然后主机名和dns条目不匹配。(可以通过手动添加来解决)


1
我认为问题的根源远不止于此...我的主机名都是正常的字母,但将其添加到/ etc / hosts可以解决一系列奇怪的问题
Magnus

0

我在Mac上遇到了同样的问题。

当我将主要和Bonjour主机名更改为仅包含字母数字字符时,它解决了该问题。这个想法来自一个同事,当他遇到类似的问题时(他不记得在哪里),他已经在某处阅读了建议。

本指南中汲取灵感,这些是我遵循的步骤:

首先,更改主要主机名

sudo scutil --set HostName <new host name>

例如:

sudo scutil --set HostName eggsandwich

接下来,更改Bonjour主机名(出于完整性考虑,我没有尝试过此步骤,因此可能不需要这样做)。

sudo scutil --set LocalHostName <new host name>

例如:

sudo scutil --set LocalHostName eggsandwich

现在重新启动您遇到问题的Java进程,希望它们不再挂起。

附带说明,这也解决了我遇到的另一个问题,即尽管我的偏好设置,终端中的新选项卡都不会在同一目录中启动bash。我没有解释为什么会发生这种情况,但是我很高兴。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.