Jvm 需要很长时间来解析 localhost 的 ip 地址
Jvm takes a long time to resolve ip-address for localhost
升级到 macOS Sierra 后,"sbt test"(包括查找本地主机 names/IP 地址)的性能似乎有问题。在以前的 OS X 版本上,大约需要 40-50 秒才能完成。 macOS Sierra 时间远高于此。最后 运行 我做的是大约 15 分钟。编译时间与 'El Capitan'.
上的大致相同
我是我团队中唯一尝试这个新 macOS 的人,所以我不知道它是只发生在我的 mac 上还是普遍存在问题。
我的同事在 Ubuntu 上遇到了类似的问题,它与随机数生成减慢测试速度有关 - Slow service response Times : Java SecureRandom & /dev/random
不幸的是,这对我不起作用。最初我在 JDK 8u54 上尝试过,然后尝试更新到 JDK 8u102,但也没有帮助。
P.S。我正在 运行宁 Macbook Pro 2015 年中期 2.8GHz i7、16GB 内存、1TB 固态硬盘。
我认为这是新 OS 的普遍问题。我有一个类似的问题:我有一个部署到 tomcat 的 Web 应用程序。在 El Capitan 上,它在 10 秒内启动,现在需要 95 秒,并且客户端(基于 Swing 的桌面应用程序)无法连接到它(或者至少花了很多时间)。我认为它是围绕网络通信的东西,因为一个简单的测试控制台应用程序运行良好。
我遇到了同样的问题。 Tomcat 升级后初始化 spring 上下文的时间从 15 秒缩短到 6 分钟...禁用 csrutils 没有解决我的问题。
我解决了问题,方法是在 /etc/hosts
文件映射到 127.0.0.1
地址以及 ::1
像这样:
127.0.0.1 localhost mbpro.local
::1 localhost mbpro.local
如果您有兴趣,可以在此处找到有关该问题和解决方案的一些详细信息:
https://thoeni.io/post/macos-sierra-java/
在 post 上,我还 link github project 来帮助解决问题并验证解决方案。
问题与(我相信)本地主机名称解析的工作方式以及 java.net.InetAddr class 如何检索地址有关。我与少数同事进行了验证,显然并不是所有升级到 Sierra 的人都会遇到这种情况,但我仍在调查此更改的根源。
无论如何,解决方案与 antid0te 实施并立即生效的解决方案相同。
我也遇到了同样的问题。我的 spring-boot 应用程序在 Sierra 上需要 60 秒才能启动,而在 Yosemite.
上需要 25 秒
调试的时候发现问题出在InetAddress.getLocalHost()
。
我更改了主机文件以添加 127.0.0.1
和 :: 1
的主机名,现在应用程序启动速度和以前一样快。
正确答案:
对于懒人:
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
启用例如系统偏好设置 > 共享 > 远程登录,导致主机名自动分配 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
获取 我的主机名。
接受的答案对我有帮助!只是在这里添加这个来解释我认为我的问题是:
我的 Hostname 类似于 "My Mac",无法解析。在设置中它告诉我可以用 mymac.local
寻址计算机
我以为是 space 并将我的 mac 重命名为 "my.mac" 但即使这样也无济于事,因为自动添加的 dns 仍然是 mymac.local
将 my.mac 添加到 /etc/hosts 中会有所帮助。
所以我猜实际问题是什么:只有当您的计算机名称包含任何非字母的内容时才会发生这种情况。这会被 os 自动删除,然后 hostname 和 dns 条目不匹配。 (可以通过手动添加来解决)
我在 Mac 上遇到了同样的问题。
当我将主要主机名和 Bonjour 主机名更改为仅包含字母数字字符时,问题就解决了。这个想法来自一位同事,他在遇到类似问题时曾在某处阅读过建议(他不记得在哪里)。
从 this guide 中汲取灵感,这些是我遵循的步骤:
首先,更改主主机名
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。我无法解释为什么会这样,但我很高兴。
升级到 macOS Sierra 后,"sbt test"(包括查找本地主机 names/IP 地址)的性能似乎有问题。在以前的 OS X 版本上,大约需要 40-50 秒才能完成。 macOS Sierra 时间远高于此。最后 运行 我做的是大约 15 分钟。编译时间与 'El Capitan'.
上的大致相同我是我团队中唯一尝试这个新 macOS 的人,所以我不知道它是只发生在我的 mac 上还是普遍存在问题。
我的同事在 Ubuntu 上遇到了类似的问题,它与随机数生成减慢测试速度有关 - Slow service response Times : Java SecureRandom & /dev/random
不幸的是,这对我不起作用。最初我在 JDK 8u54 上尝试过,然后尝试更新到 JDK 8u102,但也没有帮助。
P.S。我正在 运行宁 Macbook Pro 2015 年中期 2.8GHz i7、16GB 内存、1TB 固态硬盘。
我认为这是新 OS 的普遍问题。我有一个类似的问题:我有一个部署到 tomcat 的 Web 应用程序。在 El Capitan 上,它在 10 秒内启动,现在需要 95 秒,并且客户端(基于 Swing 的桌面应用程序)无法连接到它(或者至少花了很多时间)。我认为它是围绕网络通信的东西,因为一个简单的测试控制台应用程序运行良好。
我遇到了同样的问题。 Tomcat 升级后初始化 spring 上下文的时间从 15 秒缩短到 6 分钟...禁用 csrutils 没有解决我的问题。
我解决了问题,方法是在 /etc/hosts
文件映射到 127.0.0.1
地址以及 ::1
像这样:
127.0.0.1 localhost mbpro.local
::1 localhost mbpro.local
如果您有兴趣,可以在此处找到有关该问题和解决方案的一些详细信息: https://thoeni.io/post/macos-sierra-java/
在 post 上,我还 link github project 来帮助解决问题并验证解决方案。
问题与(我相信)本地主机名称解析的工作方式以及 java.net.InetAddr class 如何检索地址有关。我与少数同事进行了验证,显然并不是所有升级到 Sierra 的人都会遇到这种情况,但我仍在调查此更改的根源。
无论如何,解决方案与 antid0te 实施并立即生效的解决方案相同。
我也遇到了同样的问题。我的 spring-boot 应用程序在 Sierra 上需要 60 秒才能启动,而在 Yosemite.
上需要 25 秒调试的时候发现问题出在InetAddress.getLocalHost()
。
我更改了主机文件以添加 127.0.0.1
和 :: 1
的主机名,现在应用程序启动速度和以前一样快。
正确答案:
对于懒人:
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
启用例如系统偏好设置 > 共享 > 远程登录,导致主机名自动分配 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
获取 我的主机名。
接受的答案对我有帮助!只是在这里添加这个来解释我认为我的问题是:
我的 Hostname 类似于 "My Mac",无法解析。在设置中它告诉我可以用 mymac.local
寻址计算机我以为是 space 并将我的 mac 重命名为 "my.mac" 但即使这样也无济于事,因为自动添加的 dns 仍然是 mymac.local
将 my.mac 添加到 /etc/hosts 中会有所帮助。
所以我猜实际问题是什么:只有当您的计算机名称包含任何非字母的内容时才会发生这种情况。这会被 os 自动删除,然后 hostname 和 dns 条目不匹配。 (可以通过手动添加来解决)
我在 Mac 上遇到了同样的问题。
当我将主要主机名和 Bonjour 主机名更改为仅包含字母数字字符时,问题就解决了。这个想法来自一位同事,他在遇到类似问题时曾在某处阅读过建议(他不记得在哪里)。
从 this guide 中汲取灵感,这些是我遵循的步骤:
首先,更改主主机名
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。我无法解释为什么会这样,但我很高兴。