Frage JVM benötigt eine lange Zeit, um die IP-Adresse für localhost aufzulösen


Ich habe ein Problem mit der Leistung von "sbt test" nach dem Upgrade auf macOS Sierra. Auf einer früheren Version von OS X dauerte es ungefähr 40-50 Sekunden, um zu beenden. macOS Sierra Zeiten sind viel höher als das. Der letzte Lauf, den ich gemacht habe, war ungefähr 15 Minuten. Die Übersetzungszeiten sind ungefähr gleich wie bei "El Capitan".

Ich bin der Einzige aus meinem Team, der dieses neue macOS ausprobiert, also kann ich nicht sagen, ob es nur auf meinem Mac geschieht oder ob es ein universelles Problem ist.

Mein Kollege hatte ein ähnliches Problem auf Ubuntu und es war mit der Zufallszahlengenerierung verbunden, die die Tests verlangsamte - Langsame Serviceantwort Zeiten: Java SecureRandom & / dev / random

Leider hat das bei mir nicht funktioniert. Ursprünglich habe ich das auf JDK 8u54 versucht und dann versucht, auf JDK 8u102 zu aktualisieren, und das hat auch nicht geholfen.

P.S. Ich betreibe Macbook Pro Mid-2015 2,8 GHz i7, 16 GB RAM, 1 TB SSD.


75
2017-09-22 10:38


Ursprung


Antworten:


Ich hatte das gleiche Problem. Tomcat ging von 15 Sekunden auf 6 Minuten, um den Spring-Kontext nach dem Upgrade zu initialisieren ... das Deaktivieren von csrutils löste das Problem nicht für mich.

ich gelöst Das Problem, indem Sie meinen Mac-Hostnamen (d. h. Macbook.local oder wie auch immer Ihr Mac heißt) auf dem Mac hinzufügen /etc/hosts Datei zugeordnet zu 127.0.0.1 Adresse sowie die ::1 so was:

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

Wenn Sie interessiert sind, finden Sie hier einige Details zu Problem und Lösung: https://thoeni.io/post/macos-sierra-java/

Auf dem Post verlinke ich auch zu einem GitHub-Projekt um das Problem zu beheben und die Lösung zu validieren.

Das Problem hängt (glaube ich) damit zusammen, wie die Namensauflösung von localhost funktioniert und wie die Klasse java.net.InetAddr die Adressen abruft. Ich habe mich mit wenigen Kollegen vergewissert und anscheinend passiert es nicht jedem, der auf Sierra umsteigt, aber ich untersuche immer noch die Wurzeln dieser Veränderung.

Die Lösung war sowieso die gleiche Antidot implementiert und sofort gearbeitet.


228
2017-09-26 09:16



Korrekte Antwort: JVM benötigt eine lange Zeit, um die IP-Adresse für localhost aufzulösen

Für die faulen Leute:

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

23
2017-11-28 21:03



Ich habe das gleiche Problem. Meine Spring-Boot-Anwendung dauert 60 Sekunden, um auf Sierra gegen 25 Sekunden auf Yosemite zu starten.

Beim Debugging wurde mir klar, dass das Problem von InetAddress.getLocalHost () kommt. Ich habe meine Host-Datei geändert, um meinen Hostnamen für 127.0.0.1 und :: 1 hinzuzufügen, und jetzt startet die Anwendung so schnell wie zuvor.


5
2017-09-27 16:02



Aktivieren von z.B. Systemeinstellungen> Freigabe> Remote-Login führt dazu, dass dem Hostnamen automatisch eine IP-Adresse zugewiesen wird.

Da nach dem Upgrade Probleme auftreten, ist davon auszugehen, dass 10.12 die Auflösung des Hostnamens geändert hat, dh mit 10.11 wird der Hostname immer aufgelöst, während mit 10.12 nur behoben wird, wenn ein Dienst in den Systemeinstellungen aktiviert ist Teilen (jemand mit 10.11 könnte dies bestätigen).


2
2018-01-04 23:24



Ich denke, es ist ein generelles Problem mit dem neuen Betriebssystem. Ich habe ein ähnliches Problem: Ich habe eine Webanwendung, die auf Tomcat bereitgestellt wird. Auf El Capitan hat es in 10 Sekunden angefangen, jetzt dauert es 95 Sekunden und der Client (eine Swing-basierte Desktop-App) kann sich nicht mit ihm verbinden (oder es hat zumindest viel Zeit gekostet). Ich denke, es ist etwas um die Netzwerkkommunikation herum, weil eine einfache Testkonsolen-App gut läuft.


1
2017-09-23 07:51



Es war ein seltsames Problem nach der Installation des Updates auf Mac Sierra 10.12 (16A323). In der hosts-Datei mit den folgenden sortiert das Problem.

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

Du kannst das bekommen MeinHostname per Befehl $hostname überall im Terminal.


0
2017-12-21 03:37



Die angenommene Antwort hat mir geholfen! Fügen Sie hier nur das hinzu, was das Problem für mich war:

Mein Hostname war etwas wie "Mein Mac", das nicht aufgelöst werden konnte. In den Einstellungen zeigte es mir, dass der Computer mit mymac.local angesprochen werden konnte

Ich dachte, es wäre der Platz und mein Mac in "my.mac" umbenannt, aber selbst das half nicht, da die automatisch hinzugefügte DNS immer noch mymac.local war

Das Hinzufügen von my.mac zu / etc / hosts half dann.

Also mein Vermutung, was das eigentliche Problem ist: Dies geschieht nur, wenn Ihr Computername etwas enthält, das kein Buchstabe ist. Dies wird automatisch vom Betriebssystem entfernt und Hostname und DNS-Eintrag stimmen nicht überein. (Das kann behoben werden, indem ich es manuell hinzufüge)


0
2017-07-06 06:57