web-dev-qa-db-ja.com

JVMがlocalhostのIPアドレスを解決するのに時間がかかる

MacOS Sierraにアップグレードした後、「sbtテスト」のパフォーマンスに問題があるようです。 OS Xの以前のバージョンでは、終了するのに約40〜50秒かかりました。 macOS Sierraの時間はそれよりもはるかに長くなります。最後に実行したのは約15分でした。コンパイル時間は「El Capitan」とほぼ同じです。

私はチームでこの新しいmacOSを試してみましたが、私のMacだけで起こっているのか、それとも普遍的な問題なのかわかりません。

私の同僚もUbuntuで同様の問題を抱えており、乱数生成に関連してテストが遅くなりました- 遅いサービス応答時間:Java SecureRandom&/ dev/random

残念ながら、それは私にとってはうまくいきませんでした。もともと私はJDK 8u54でそれを試し、それからJDK 8u102にアップデートしようとしましたが、それでも助けにはなりませんでした。

追伸Macbook Pro Mid-2015 2.8GHz i7、16GB RAM、1TB SSDを実行しています。

95
Tomasz Mikuś

同じ問題がありました。 Tomcatは、アップグレード後、春のコンテキストを初期化するために15秒から6分になりました... csrutilsを無効にしても問題は解決しませんでした。

私は解決しました私のMacホスト名(Macbook.local、またはMacが呼び出されたもの)を/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/

投稿では、 githubプロジェクト にリンクして、問題のトラブルシューティングとソリューションの検証を支援しています。

この問題は、localhostの名前解決がどのように機能するか、およびJava.net.InetAddrクラスがアドレスを取得する方法に関連しています(私は信じています)。数人の同僚と確認しましたが、どうやらSierraにアップグレードしたすべての人にそれが起こるわけではないようですが、この変更の原因については現在調査中です。

とにかく解決策は、 antid0te が実装され、すぐに機能したことと同じでした。

282
thoeni

正解: 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
34
camikiller

私は同じ問題を抱えています。私のスプリングブートアプリケーションは、ヨセミテの25秒に対してSierraで60秒かかります。

デバッグ中に、問題はInetAddress.getLocalHost()に起因していることに気付きました。ホストファイルを変更して、127.0.0.1および:: 1のホスト名を追加すると、アプリケーションは以前と同じ速さで起動します。

6
Antid0te

有効化[システム環境設定]> [共有]> [リモートログイン]を選択すると、ホスト名にIPアドレスが自動的に割り当てられます。

アップグレード後に問題が発生するので、10.12でホスト名の解決方法が変更された、つまり少なくとも10.11ではホスト名が常に解決され、10.12ではシステム環境設定でサービスが有効になっている場合にのみ解決されると想定するのは理にかなっています共有(10.11の誰かがこれを確認できます)。

2
jurajw

Mac Sierra 10.12 (16A323)への更新をインストールした後、それは奇妙な問題でした。以下のホストファイルで問題をソートしました。

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

ターミナルのどこでもコマンド$hostnamemyhostnameを取得できます。

1
Sidd Gautama

これは新しいOSの一般的な問題だと思います。同様の問題があります。TomcatにデプロイされるWebアプリケーションがあります。 El Capitanでは10秒で起動しましたが、今では95秒かかり、クライアント(Swingベースのデスクトップアプリ)はそれに接続できません(または少なくとも時間がかかりました)。シンプルなテストコンソールアプリがうまく動作するので、ネットワーク通信に関するものだと思います。

1
Andras Gyetvan

受け入れられた答えは私を助けました!ここにこれを追加して、私にとって問題だと思うことを説明します:

私のホスト名は「My Mac」のようなもので、解決できませんでした。設定では、コンピューターがmymac.localでアドレス指定できることを示しました

私はそれがスペースだと思って、私のMacの名前を「my.mac」に変更しましたが、自動的に追加されたDNSはまだmymac.localだったので、これでも役に立ちませんでした

My.macを/ etc/hostsに追加すると役立ちました。

実際の問題は何であるかを推測します。これは、コンピューター名に文字以外のものが含まれている場合にのみ発生します。これはOSによって自動的に削除され、ホスト名とDNSエントリが一致しません。 (これは手動で追加することで修正できます)

0
Arne

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を開始しないという別の問題も解決しました。なぜそれが起こったのかについては説明がありませんが、私はとても喜んでいます。

0
Erik Madsen