Jvm'nin localhost için ip adresini çözümlemesi uzun zaman alıyor


112

MacOS Sierra'ya yükselttikten sonra "sbt testi" (localhost adlarına / IP adreslerine bakmayı da içeren) performansıyla ilgili bir sorun yaşıyorum. OS X'in önceki bir sürümünde tamamlanması yaklaşık 40-50 saniye sürdü. macOS Sierra süreleri bundan çok daha yüksektir. Yaptığım son koşu yaklaşık 15 dakikaydı. Derleme süreleri "El Capitan" daki ile hemen hemen aynıdır.

Ekibimden bu yeni macOS'u deneyen tek kişi benim, bu yüzden bunun sadece Mac'imde mi yoksa evrensel bir sorun mu olduğunu anlayamıyorum.

Meslektaşımın Ubuntu'da benzer bir sorunu vardı ve bu, testleri yavaşlatan rastgele sayı oluşturma ile ilgiliydi - Yavaş hizmet yanıtı Süreler: Java SecureRandom ve / dev / random

Ne yazık ki bu benim için işe yaramadı. Başlangıçta bunu JDK 8u54'te denedim ve sonra JDK 8u102'ye güncellemeyi denedim ve bu da yardımcı olmadı.

PS Macbook Pro 2015 Ortası 2.8GHz i7, 16GB ram, 1TB SSD çalıştırıyorum.


Ben de gradle clean testaynı sorunu yaşıyorum ve kullanıyorum .
Max Peng

Bu, OpenJDK'ye bildirilen hatadır: bugs.openjdk.java.net/browse/JDK-8143378 Düzeltilemeyecek başka bir hatanın kopyası olarak çözüldü. Muhtemelen yeniden açılmalıdır.
Lóránt Pintér

Yanıtlar:


326

Ben de aynı sorunu yaşadım. Tomcat, yükseltmeden sonra bahar içeriğini başlatmak için 15 saniyeden 6 dakikaya çıktı ... csrutils'in devre dışı bırakılması sorunu benim için çözmedi.

Ben çözüldü üzerinde (Mac denir ne olursa olsun yani Macbook.local veya) benim Mac hostname ekleyerek sorunu /etc/hostseşleştirilmiş dosyanın 127.0.0.1sıra sıra adrese ::1böyle:

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

Eğer ilgileniyorsanız, sorun ve çözümle ilgili bazı ayrıntıları burada bulabilirsiniz: https://thoeni.io/post/macos-sierra-java/

Gönderide , sorunu gidermek ve çözümü doğrulamak için bir github projesine de bağlantı veriyorum .

Sorun localhost ad çözümlemesinin nasıl çalıştığı ve java.net.InetAddr sınıfının adresleri nasıl aldığıyla ilgili (inanıyorum). Birkaç meslektaşımla doğruladım ve görünüşe göre Sierra'ya yükselten herkesin başına gelmiyor, ancak hala bu değişikliğin kökenlerini araştırıyorum.

Yine de çözüm, antid0te'nin uyguladığı ve hemen çalıştığı ile aynıydı .


Aynı sorun ... Ve SIP'yi devre dışı bırakmanın benim için de işe yaramadığını doğrulayabilirim.
borges

Harika çalışıyor, github projesini kontrol edebilirsiniz github.com/thoeni/inetTester
christmo

21
Buldum! Mac adı değil .. Ana bilgisayar adı. Terminalde "hostname" yazarak doğru hostname verebilirsiniz.
VK321

1
Bunu yıllar sonra OSX 10.14.2'de hala görüyorum. Düzeltme için çok teşekkürler.
Malcolm Crum

1
macOS Mojave 10.14.4, hala bir sorun. localhostIPv4 ve IPv6 geridöngü hatlarına ( 127.0.0.1, ::1) sonra ana bilgisayar adı eklemek hala düzeltmeyi doğruladı!
Köpek

43

Doğru cevap: Jvm'nin localhost için ip adresini çözümlemesi uzun zaman alıyor

Tembel insanlar için:

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

4
Müthiş! Bu, minecraft fırlatma süremi 12 saniyeden 0,5 saniyeye çıkardı.
Bob

@camikiller Hostname vs Sharing> Computer Name için 2 farklı değer görüyorum, hangisini kullanacağımı açıklayınız?
vikramvi

Daha iyi çözüm, MacOS @vikramvi'nizi yükseltmektir
camikiller

@camikiller daha sonra apple.stackexchange.com/questions/66611/… ile aynı ada sahip olmak için yaptım ama yine de çalışmıyor. Paylaşımda başka ayarlar yapmam gerekir mi?
vikramvi

@vikramvi Dosyanızı manuel olarak düzenlemeyi deneyin /etc/hostsve 2 ana bilgisayarı ekleyin
camikiller

6

Bende de aynı sorun var. İlkbahar önyükleme uygulamamın Sierra'da başlaması, Yosemite'de 25 saniye sürüyor.

Hata ayıklarken, sorunun InetAddress.getLocalHost () 'dan geldiğini fark ettim. Ana bilgisayar dosyamı 127.0.0.1 ve :: 1 için ana bilgisayar adımı eklemek üzere değiştirdim ve şimdi uygulama eskisi kadar hızlı başlıyor.


2
Merhaba, yardımcı oluyorsa bu üst düzey açıklamayı buldum (ancak yine de MacOS Sierra sürümünde neyin değiştiği net değil): "Bir ana bilgisayar adı talep ettiğinizde, JDK bunu IP adreslerine çözümler. Ardından, bu adreslerin geriye doğru aramasını dener. ve sonuçlardan en az birinin giriş ana bilgisayar adıyla eşleşip eşleşmediğini kontrol eder. Yavaş olan bu ters aramadır. Yavaşlık JVM ile sınırlı değildir. İşletim sisteminde böyle bir geriye doğru arama yapmaya çalışan her şey yavaş olacaktır. / etc / hosts içinde uygun yapılandırma. " ( github.com/spring-projects/spring-boot/issues/7087 adresinden )
thoeni

3

Örneğin Sistem Tercihleri> Paylaşım> Uzaktan Oturum Açma'nın etkinleştirilmesi, ana bilgisayar adının otomatik olarak bir IP adresi atanmasıyla sonuçlanır.

İnsanlar yükseltmeden sonra sorunlar gördükçe, 10.12'nin ana bilgisayar adının çözülme şeklini değiştirdiğini varsaymak mantıklıdır, yani en azından 10.11 ile ana bilgisayar adı her zaman çözülürken, 10.12 ile yalnızca Sistem Tercihleri> bölümünde bir hizmet etkinleştirildiğinde çözülür. Paylaşma (10.11'e sahip biri bunu onaylayabilir).


10.12.5'im var ama çözümünüz işe yaramadı. hangi sürüme sahipsin
vikramvi

@vikramvi 10.12.6'm var ve kurulumum için işler hala açıklandığı gibi çalışıyor. Standart bir / etc / hosts dosyasıyla ve paylaşım devre dışı bırakıldığında, $ (ana bilgisayar adı) pingi bilinmeyen bir ana bilgisayar hatasıyla başarısız olur. Paylaşım etkinleştirildiğinde, ana bilgisayar adı VLAN'ımın IP'sine çözülür. Java (8u141) için, paylaşımın devre dışı bırakılması durumunda InetAddress.getLocalHost () 'u çağırmak 5 saniye sürer. Paylaşım etkinleştirildiğinde yürütme süresi 13 ms'ye düşer.
jurajw

Bu işe yarıyor (gerçi gerçekten tuhaf), temelde "Uzaktan Giriş" zaten işaretlenmiş olsa bile, işaretini kaldırın, sonra tekrar kontrol edin. İşler yeniden çalışmaya başlar. Bunu bir kez / boot LOL yapmalısınız. Ayrıca, "mDNS" işlemini (daha önce) öldürdüyseniz, .local adreslerini geri getirmek için bu numarayı yapmanız gerekeceğini de unutmayın. Veya daha kalıcı bir düzeltme için / etc / hosts yolunu kullanın
rogerdpack

1

Yeni işletim sistemi ile ilgili genel bir sorun olduğunu düşünüyorum. Benzer bir problemim var: tomcat'e dağıtılan bir web uygulamam var. El Capitan'da 10 saniyede başladı, şimdi 95 saniye sürüyor ve istemci (Swing tabanlı bir masaüstü uygulaması) ona bağlanamıyor (veya en azından çok zaman aldı). Bunun ağ iletişimi ile ilgili olduğunu düşünüyorum çünkü basit bir test konsolu uygulaması iyi çalışıyor.


1
SIP'yi kapatmak sorunumu çözer. macossierra-slow.com/…
Andras Gyetvan

1

Güncellemeyi konumuna yükledikten sonra garip bir sorundu Mac Sierra 10.12 (16A323). Aşağıdaki ile ana bilgisayar dosyasında sorunu sıraladı.

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

Myhostname'i$hostname terminalin herhangi bir yerinden komutla alabilirsiniz .


0

Kabul edilen cevap bana yardımcı oldu! Bunu buraya ekleyerek benim için sorunun ne olduğunu düşündüğümü açıklamak:

Ana Bilgisayar Adım, "Mac'im" gibi çözülemeyen bir şeydi. Ayarlarda bana bilgisayarın mymac.local ile adreslenebileceğini gösterdi

Alan olduğunu düşündüm ve mac'umu "my.mac" olarak yeniden adlandırdım, ancak dns otomatik olarak eklendiğinden bu bile yardımcı olmadı. Hala mymac.local

My.mac'i / etc / hosts dosyasına eklemek o zaman yardımcı oldu.

Tahminimce asıl sorun ne: Bu yalnızca bilgisayar adınız harf olmayan herhangi bir şey içerdiğinde olur. Bu, işletim sistemi tarafından otomatik olarak kaldırılır ve ardından ana bilgisayar adı ve dns girişi eşleşmez. (manuel olarak eklemem düzeltilebilir)


1
Sanırım sorun bundan daha derin ... ana bilgisayar adımın tamamı normal alfa harfleriydi, ancak / etc / hosts dosyasına eklemek benim için bir dizi tuhaf sorunu çözdü
Magnus

0

Mac'imde de aynı sorunu yaşadım.

Birincil ve Bonjour ana bilgisayar adlarımı yalnızca alfanümerik karakterler içerecek şekilde değiştirdiğimde sorunu çözdü. Fikir, benzer bir sorunla karşı karşıya kaldığı sırada (nerede olduğunu hatırlayamadı) bir yerde tavsiyeyi okumuş olan bir meslektaştan geldi.

Bu kılavuzdan ilham alarak izlediğim adımlar şunlardı:

İlk olarak, birincil ana bilgisayar adını değiştirin

sudo scutil --set HostName <new host name>

Örneğin:

sudo scutil --set HostName eggsandwich

Ardından, Bonjour ana bilgisayar adını değiştirin (tamlık için, bu adımı hiç denemedim, bu yüzden gerekli olmayabilir).

sudo scutil --set LocalHostName <new host name>

Örneğin:

sudo scutil --set LocalHostName eggsandwich

Şimdi sorun yaşadığınız java işlemlerini yeniden başlatın ve umarız artık takılmamaları gerekir.

Bir yandan not olarak, bu aynı zamanda Terminal'de yeni bir sekmenin tercihlerime rağmen aynı dizinde bash başlatmayacağı bir başka sorunu da çözdü. Bunun neden olduğuna dair bir açıklamam yok ama çok memnunum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.