Jvm membutuhkan waktu lama untuk menyelesaikan ip-address untuk localhost

112

Sepertinya saya mengalami masalah dengan kinerja "uji sbt" (yang mencakup mencari nama / alamat IP localhost) setelah memutakhirkan ke macOS Sierra. Pada versi OS X sebelumnya, butuh waktu sekitar 40-50 detik untuk menyelesaikannya. Waktu macOS Sierra jauh lebih tinggi dari itu. Lari terakhir yang saya lakukan adalah sekitar 15 menit. Waktu kompilasi hampir sama dengan di 'El Capitan'.

Saya satu-satunya dari tim saya yang mencoba macOS baru ini, jadi saya tidak tahu apakah ini hanya terjadi di mac saya atau apakah ini masalah universal.

Rekan saya memiliki masalah serupa di Ubuntu dan itu terkait dengan pembuatan nomor acak yang memperlambat pengujian - Waktu respons layanan lambat: Java SecureRandom & / dev / random

Sayangnya, itu tidak berhasil untuk saya. Awalnya saya mencobanya di JDK 8u54 dan kemudian mencoba memperbarui ke JDK 8u102 dan itu tidak membantu juga.

PS Saya menjalankan Macbook Pro Mid-2015 2.8GHz i7, 16GB ram, 1TB SSD.

Tomasz Mikuś
sumber
Saya menggunakan gradle clean testdan mengalami masalah yang sama.
Max Peng
Ini adalah bug yang dilaporkan ke OpenJDK: bugs.openjdk.java.net/browse/JDK-8143378 Ini telah diselesaikan sebagai duplikat dari bug lain yang tidak akan diperbaiki. Mungkin harus dibuka kembali.
Lóránt Pintér

Jawaban:

326

Saya memiliki masalah yang sama. Tomcat beralih dari 15 detik menjadi 6 menit untuk menginisialisasi konteks pegas setelah peningkatan ... menonaktifkan csrutils tidak menyelesaikan masalah bagi saya.

Saya memecahkan masalah dengan menambahkan nama host Mac saya (yaitu Macbook.local, atau apa pun nama Mac Anda) pada /etc/hostsfile yang dipetakan ke 127.0.0.1alamat dan juga ::1seperti ini:

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

Jika Anda tertarik, Anda dapat menemukan beberapa detail tentang masalah dan solusinya di sini: https://thoeni.io/post/macos-sierra-java/

Di posting saya juga menautkan ke proyek github untuk membantu memecahkan masalah dan memvalidasi solusinya.

Masalahnya terkait (saya percaya) tentang bagaimana resolusi nama localhost bekerja dan bagaimana kelas java.net.InetAddr mengambil alamat. Saya memverifikasi dengan beberapa kolega dan tampaknya itu tidak terjadi pada semua orang yang meningkatkan ke Sierra, tetapi saya masih menyelidiki akar dari perubahan ini.

Solusinya tetap sama dengan antid0te yang diterapkan dan segera bekerja.

thoeni
sumber
Masalah yang sama ... Dan saya dapat mengonfirmasi bahwa menonaktifkan SIP juga tidak berhasil untuk saya.
Borges
Bagus sekali, Anda dapat memeriksa dengan proyek github github.com/thoeni/inetTester
christmo
21
Menemukannya! Ini bukan nama mac .. Nama hostnya. Dengan mengetik "nama host" di terminal dapat memberikan nama host yang benar.
VK321
1
Masih melihat ini di OSX 10.14.2, beberapa tahun kemudian. Terima kasih banyak atas perbaikannya.
Malcolm Crum
1
macOS Mojave 10.14.4, masih bermasalah. Menambahkan nama host setelah localhostke jalur loopback IPv4 dan IPv6 ( 127.0.0.1, ::1) masih memperbaiki perbaikan!
Anjing
43

Jawaban yang benar: Jvm membutuhkan waktu lama untuk menyelesaikan alamat ip untuk localhost

Untuk orang malas:

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
camikiller
sumber
4
Hebat! Ini meningkatkan waktu peluncuran minecraft saya dari 12 detik menjadi 0,5 detik.
Bob
@camikiller Saya melihat 2 nilai berbeda untuk nama host vs Berbagi> Nama Komputer, harap jelaskan mana yang akan digunakan?
vikramvi
Solusi yang lebih baik adalah dengan meningkatkan MacOS Anda @vikramvi
camikiller
@camikiller nanti saya buat per apple.stackexchange.com/questions/66611/… , punya nama yang sama tapi tetap saja tidak berfungsi. Apakah saya perlu melakukan beberapa pengaturan lain dalam Berbagi?
vikramvi
@vikramvi Coba edit /etc/hostsfile Anda secara manual dan tambahkan 2 host
camikiller
6

Saya memiliki masalah yang sama. Aplikasi boot musim semi saya membutuhkan waktu 60 detik untuk memulai di Sierra dibandingkan 25 detik di Yosemite.

Saat men-debug, saya menyadari bahwa masalahnya berasal dari InetAddress.getLocalHost (). Saya mengubah file host saya untuk menambahkan nama host saya untuk 127.0.0.1 dan :: 1 dan sekarang aplikasi dimulai secepat sebelumnya.

Antid0te
sumber
2
Hai, Saya menemukan penjelasan tingkat tinggi ini jika membantu (tetapi masih belum jelas apa yang berubah dalam rilis MacOS Sierra): "Saat Anda meminta nama host, JDK menyelesaikannya ke alamat IP. Kemudian mencoba pencarian balik dari alamat tersebut dan memeriksa bahwa setidaknya satu dari hasil memetakan kembali ke nama host masukan. Pencarian terbalik inilah yang lambat. Kelambatan tidak terbatas pada JVM. Apa pun di OS yang mencoba melakukan pencarian terbalik seperti itu akan lambat tanpa konfigurasi yang sesuai di / etc / hosts. " (dari github.com/spring-projects/spring-boot/issues/7087 )
thoeni
3

Mengaktifkan misalnya System Preferences> Sharing> Remote Login, mengakibatkan nama host secara otomatis diberi alamat IP.

Karena orang-orang melihat masalah setelah peningkatan, masuk akal untuk mengasumsikan bahwa 10.12 mengubah cara nama host diselesaikan, yaitu setidaknya dengan 10.11 nama host selalu diselesaikan, sedangkan dengan 10.12 itu diselesaikan hanya jika layanan diaktifkan di Preferensi Sistem> Berbagi (seseorang dengan 10.11 dapat mengonfirmasi ini).

jurajw
sumber
Saya telah 10.12.5 tetapi solusi Anda tidak berhasil. versi yang mana yang kamu punya
vikramvi
@vikramvi Saya memiliki 10.12.6 dan untuk instalasi saya masih berfungsi seperti yang dijelaskan. Dengan file standar / etc / hosts dan berbagi dinonaktifkan, ping $ (hostname) gagal dengan kesalahan host yang tidak diketahui. Dengan mengaktifkan berbagi, nama host diselesaikan ke IP VLAN saya. Sedangkan untuk Java (8u141), memanggil InetAddress.getLocalHost () memerlukan waktu 5 detik jika berbagi dinonaktifkan. Dengan berbagi diaktifkan, waktu eksekusi turun menjadi 13 ms.
jurajw
Ini berhasil (meskipun sangat aneh), pada dasarnya meskipun "Remote Login" sudah dicentang, hapus centangnya, lalu periksa lagi. Semuanya mulai bekerja lagi. Anda harus melakukannya sekali / boot LOL. Perhatikan juga bahwa jika Anda pernah mematikan proses "mDNS" (sebelumnya), Anda harus melakukan trik ini untuk mengembalikan alamat .local sama sekali. Atau gunakan cara / etc / hosts untuk perbaikan yang lebih permanen
rogerdpack
1

Saya pikir ini adalah masalah umum dengan OS baru. Saya memiliki masalah yang sama: Saya memiliki aplikasi web yang digunakan untuk kucing jantan. Di El Capitan itu dimulai dalam 10 detik, sekarang dibutuhkan 95 detik dan klien (aplikasi desktop berbasis Swing) tidak dapat terhubung dengannya (atau setidaknya butuh banyak waktu). Saya pikir itu adalah sesuatu di sekitar komunikasi jaringan, karena aplikasi konsol pengujian sederhana berjalan dengan baik.

Andras Gyetvan
sumber
1
Mematikan SIP memecahkan masalah saya. macossierra-slow.com/…
Andras Gyetvan
1

Itu adalah masalah yang aneh setelah menginstal pembaruan ke Mac Sierra 10.12 (16A323). Dalam file hosts dengan di bawah ini diurutkan masalah.

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

Anda bisa mendapatkan myhostname dengan perintah $hostnamedi mana saja di terminal.

Sidd Gautama
sumber
0

Jawaban yang diterima membantu saya! Hanya menambahkan ini di sini untuk menjelaskan apa yang menurut saya masalah bagi saya adalah:

Nama Host saya adalah sesuatu seperti "Mac Saya" yang tidak dapat diselesaikan. Dalam pengaturan itu menunjukkan kepada saya bahwa komputer dapat diatasi dengan mymac.local

Saya pikir itu adalah ruang dan mengganti nama mac saya menjadi "my.mac" tetapi bahkan ini tidak membantu karena dns yang ditambahkan secara otomatis masih mymac.local

Menambahkan my.mac ke / etc / hosts membantu.

Jadi tebakan saya apa masalah sebenarnya adalah: Ini hanya terjadi ketika nama komputer Anda mengandung sesuatu yang bukan huruf. Ini secara otomatis dihapus oleh os dan kemudian nama host dan entri dns tidak cocok. (yang dapat diperbaiki saya menambahkannya secara manual)

Arne
sumber
1
Saya pikir masalahnya lebih dalam dari itu ... nama host saya semua huruf alfa normal, namun menambahkannya ke / etc / hosts memecahkan berbagai masalah aneh bagi saya
Magnus
0

Saya mengalami masalah yang sama di Mac saya.

Ketika saya mengubah nama host utama dan Bonjour saya menjadi hanya berisi karakter alfanumerik, ini menyelesaikan masalah. Ide tersebut datang dari seorang rekan yang pernah membaca saran tersebut di suatu tempat ketika dia menghadapi masalah yang sama (dia tidak dapat mengingat di mana).

Mengambil inspirasi dari panduan ini, inilah langkah-langkah yang saya ikuti:

Pertama, ubah nama host utama

sudo scutil --set HostName <new host name>

misalnya:

sudo scutil --set HostName eggsandwich

Selanjutnya ganti hostname Bonjour (untuk kelengkapannya saya tidak pernah coba tanpa langkah ini jadi bisa jadi tidak diperlukan).

sudo scutil --set LocalHostName <new host name>

misalnya:

sudo scutil --set LocalHostName eggsandwich

Sekarang mulai ulang proses java yang bermasalah, dan semoga proses tersebut tidak lagi macet.

Di samping catatan, ini juga memecahkan masalah lain yang saya miliki di mana tab baru di Terminal tidak akan memulai bash di direktori yang sama terlepas dari preferensi saya. Saya tidak memiliki penjelasan mengapa itu terjadi, tetapi saya sangat senang.

Erik Madsen
sumber