Jvm需要很长时间才能解析localhost的IP地址
升级到macOS Sierra后,我似乎遇到了“sbt test”性能问题。在之前的OS X版本中,完成大约需要40-50秒。 macOS塞拉利昂时间比这更高。我做的最后一次是大约15分钟。编译时间与'El Capitan'大致相同。Jvm需要很长时间才能解析localhost的IP地址
我是我的团队中唯一一个尝试这个新的macOS的人,所以我不知道它是否只发生在我的mac上,或者它是一个普遍问题。
我的同事对Ubuntu的一个类似的问题,它与随机数生成减慢测试相关 - Slow service response Times : Java SecureRandom & /dev/random
不幸的是,这并没有为我工作。最初我在JDK 8u54上尝试过,然后尝试更新到JDK 8u102,这并没有帮助。
P.S.我正在运行Macbook Pro 2015年中期2.8GHz i7,16GB RAM,1TB SSD。
我有同样的问题。升级后,Tomcat从15秒延长到6分钟以初始化春季环境...禁用csrutils并没有为我解决问题。
127.0.0.1 localhost mbpro.local
::1 localhost mbpro.local
:
我通过在/etc/hosts
文件映射到127.0.0.1
地址还有::1
这样加入我的Mac主机名(即Macbook.local,或任何你的Mac被调用)解决问题
如果你有兴趣,你可以找到关于这个问题,并解决这里的一些细节: https://thoeni.io/post/macos-sierra-java/
在文章中,我还链接到github project,以帮助解决该问题和瓦利约会解决方案。
问题是相关的(我相信)本地主机名称解析是如何工作的以及java.net.InetAddr类如何检索地址。我与几位同事核实,显然这并不是每个升级到Sierra的人都会遇到,但我仍在调查这一变化的根源。
无论如何,解决方案与antid0te立即实施和运行的解决方案相同。
同样的问题......我可以确认,禁用SIP也不适用于我。 – borges
/etc/hosts解决方案适用于我!谢谢! – woolyninja
@thoeni这个完美的作品。只要我改变'/ etc/hosts',运行测试的速度就回到正常:) –
我认为这是新操作系统的一个普遍问题。我有一个类似的问题:我有一个部署到tomcat的Web应用程序。在El Capitan,它在10秒内启动,现在需要95秒,而客户端(基于Swing的桌面应用程序)无法连接到它(或者至少需要很多时间)。我认为这是围绕网络通信的问题,因为一个简单的测试控制台应用运行良好。
关闭SIP解决了我的问题。 http://macossierra-slow.com/how-to-disable-sip-rootless-system-integrity-protection/ –
我有同样的问题。我的春季启动应用程序需要60秒才能在优胜美地上的Sierra上开始25秒。
调试时,我意识到问题来自InetAddress.getLocalHost()。 我更改了我的主机文件,为127.0.0.1和:: 1添加了我的主机名,现在应用程序的启动速度与之前一样快。
嗨,我发现这个高层次的解释是否有帮助(但仍不清楚MacOS Sierra发布版本中发生了什么变化):“当您请求主机名时,JDK将其解析为IP地址,然后尝试反向查找那些地址并检查是否至少有一个结果映射回输入主机名。这是反向查找,速度很慢。缓慢不限于JVM。如果没有在/ etc/hosts中进行适当的配置,任何试图执行这种反向查找的操作系统都会很慢。“(来自https://github.com/spring-projects/spring-boot/issues/7087) – thoeni
这可能是因为Mac OS Sierra设置方式中存在一些错误。尝试进行所谓的SMC重置或PRAM重置,以查看它是否会修复您的Mac。这些软件重置并不会损害您的用户数据。他们可能会要求您在重新启动后重置系统时间。
但他们可以解决您的问题。您也可以看一些有关Mac OS塞拉利昂故障排除这里提到的技巧 - http://elcapitanslow.com/mac-os-sierra-slow-what-to-do/
正确答案:Jvm takes a long time to resolve ip-address for localhost
对于懒惰的人:
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
太棒了! – Bob
@camikiller我看到2个不同的主机名值与共享>计算机名称,请说明使用哪一个? – vikramvi
更好的解决方案是升级您的MacOS @vikramvi – camikiller
例如启用系统偏好设置>共享>远程登录,会导致主机名被自动分配一个IP地址。
由于人们在升级后看到问题,所以假设10.12改变了主机名的解析方式是合理的,即至少在10.11时总是解析主机名,而在10.12时仅在启用了服务时才解析在“系统偏好设置”>“共享”(10.11的人可以确认这一点)。
将更新安装到Mac Sierra 10.12 (16A323)
之后,这是一个奇怪的问题。在与下面排序问题的主机文件。
::1 localhost <myhostname>.local <--- Was already present
127.0.0.1 localhost <myhostname>.local <--- Solved the tomcat loading issue
您可以通过命令$hostname
终端随时随地获得MYHOSTNAME。
我有同样的问题 - 很高兴我并不孤单 – woolyninja
我正在使用'gradle clean test'并且遇到同样的问题。 –