Jvm需要很长时间来解析localhost的ip-address

Tom*_*kuś 102 java scala sbt scalatest macos-sierra

升级到macOS Sierra后,我似乎遇到了"sbt test"性能问题.在以前版本的OS X上花了大约40-50秒才完成.macOS Sierra时代要高得多.我上次跑的时间大约是15分钟.编译时间与'El Capitan'大致相同.

我是团队中唯一一个尝试这个新macOS的人,所以我不知道它是否只发生在我的Mac上,还是一个普遍的问题.

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

不幸的是,这对我不起作用.最初我在JDK 8u54上试过,然后尝试更新到JDK 8u102,这也没有帮助.

PS我正在运行Macbook Pro Mid-2015 2.8GHz i7,16GB RAM,1TB SSD.

tho*_*eni 297

我有同样的问题.升级后,Tomcat从15秒到6分钟初始化弹簧上下文...禁用csrutils并没有为我解决问题.

通过/etc/hosts映射到127.0.0.1地址的文件中添加我的Mac主机名(即Macbook.local或任何Mac调用)解决了这个问题,::1如下所示:

127.0.0.1   localhost mbpro.local
::1         localhost mbpro.local
Run Code Online (Sandbox Code Playgroud)

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

在帖子上我还链接到github项目,以帮助解决问题和验证解决方案.

这个问题与我相信的本地主机名解析如何工作以及java.net.InetAddr类如何检索地址有关.我与几位同事进行了验证,显然并没有发生升级到塞拉利昂的所有人,但我仍在调查这一变化的根源.

无论如何,解决方案与antid0te实现并立即工作相同.

  • 找到了!它不是mac名称..它的主机名.通过在终端中键入"hostname"可以给出正确的主机名. (19认同)
  • / etc/hosts解决方案对我有用!谢谢! (5认同)
  • macOS Mojave 10.14.4,仍然是一个问题。将“localhost”后的主机名附加到 IPv4 和 IPv6 环回行(“127.0.0.1”、“::1”)仍然经过验证修复! (2认同)

cam*_*ler 38

正确答案:Jvm需要很长时间来解析localhost的ip-address

对于懒惰的人:

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
Run Code Online (Sandbox Code Playgroud)

  • 真棒!这使我的我的飞船发射时间从12秒增加到0.5秒. (3认同)

小智 6

我也有同样的问题.我的春季启动应用需要60秒才能在塞舌斯开始,而优胜美地则需要25秒.

在调试时,我意识到问题来自InetAddress.getLocalHost().我更改了我的主机文件以添加127.0.0.1和:: 1的主机名,现在应用程序以前所述的速度启动.

  • 嗨,如果有帮助,我找到了这个高级解释(但仍然不清楚 MacOS Sierra 版本中发生了什么变化):“当您请求主机名时,JDK 将其解析为 IP 地址。然后它尝试反向查找这些地址并检查是否至少有一个结果映射回输入主机名。正是这种反向查找很慢。这种缓慢不仅限于 JVM。操作系统上任何尝试执行这种反向查找的东西都会很慢,没有/etc/hosts 中的适当配置。” (来自 https://github.com/spring-projects/spring-boot/issues/7087) (2认同)