Jvm mất nhiều thời gian để giải quyết địa chỉ ip cho localhost


112

Tôi dường như gặp sự cố với hiệu suất của "kiểm tra sbt" (bao gồm tra cứu tên / địa chỉ IP máy chủ cục bộ) sau khi nâng cấp lên macOS Sierra. Trên phiên bản OS X trước đó, mất khoảng 40-50 giây để hoàn tất. macOS Sierra lần cao hơn nhiều. Lần chạy cuối cùng tôi đã làm là khoảng 15 phút. Thời gian biên dịch tương tự như trên 'El Capitan'.

Tôi là người duy nhất trong nhóm của mình dùng thử macOS mới này nên tôi không thể biết liệu nó chỉ xảy ra trên máy mac của tôi hay đó là một vấn đề phổ biến.

Đồng nghiệp của tôi gặp sự cố tương tự trên Ubuntu và nó có liên quan đến việc tạo số ngẫu nhiên làm chậm các thử nghiệm - Thời gian phản hồi dịch vụ chậm: Java SecureRandom & / dev / random

Thật không may, điều đó không hiệu quả với tôi. Ban đầu tôi đã thử điều đó trên JDK 8u54 và sau đó thử cập nhật lên JDK 8u102 và điều đó cũng không giúp được gì.

PS Tôi đang chạy Macbook Pro Mid-2015 i7 2.8GHz, ram 16GB, SSD 1TB.


Tôi đang sử dụng gradle clean testvà gặp vấn đề tương tự.
Max Peng

Đây là lỗi được báo cáo cho OpenJDK: bug.openjdk.java.net/browse/JDK-8143378 Nó đã được giải quyết như một bản sao của một lỗi khác sẽ không được sửa. Nó có lẽ nên được mở lại.
Lóránt Pintér

Câu trả lời:


326

Tôi đã từng gặp vấn đề tương tự. Tomcat đã mất từ ​​15 giây đến 6 phút để khởi chạy bối cảnh mùa xuân sau khi nâng cấp ... vô hiệu hóa csrutils không giải quyết được vấn đề cho tôi.

Tôi đã giải quyết vấn đề bằng cách thêm tên máy Mac của mình (tức là Macbook.local hoặc bất kỳ tên máy Mac nào của bạn) trên /etc/hoststệp được ánh xạ tới 127.0.0.1địa chỉ cũng như ::1tương tự như sau:

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

Nếu quan tâm, bạn có thể tìm thấy một số chi tiết về sự cố và giải pháp tại đây: https://thoeni.io/post/macos-sierra-java/

Trên bài đăng, tôi cũng liên kết đến một dự án github để giúp khắc phục sự cố và xác thực giải pháp.

Vấn đề liên quan (tôi tin) về cách hoạt động của độ phân giải tên localhost và cách lớp java.net.InetAddr đang truy xuất địa chỉ. Tôi đã xác minh với một số đồng nghiệp và dường như nó không xảy ra với tất cả những người đã nâng cấp lên Sierra, nhưng tôi vẫn đang điều tra gốc rễ của sự thay đổi này.

Dù sao giải pháp vẫn giống như antid0te đã triển khai và hoạt động ngay lập tức.


Vấn đề tương tự ... Và tôi có thể xác nhận rằng việc tắt SIP cũng không hoạt động với tôi.
sinh

Nó hoạt động tuyệt vời, bạn có thể kiểm tra với dự án github github.com/thoeni/inetTester
christmo

21
Tìm thấy rồi! Nó không phải tên mac .. Tên máy chủ của nó. Bằng cách gõ "tên máy chủ" trong thiết bị đầu cuối có thể cung cấp tên máy chủ chính xác.
VK321

1
Vẫn thấy điều này trên OSX 10.14.2, nhiều năm sau. Cảm ơn rất nhiều cho bản sửa lỗi.
Malcolm Crum

1
macOS Mojave 10.14.4, vẫn là một vấn đề. Nối tên máy chủ sau localhostdòng lặp lại IPv4 và IPv6 ( 127.0.0.1, ::1) vẫn được xác minh sửa chữa!
Dog

43

Câu trả lời đúng: Jvm mất nhiều thời gian để phân giải địa chỉ ip cho localhost

Đối với những người lười biếng:

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
Tuyệt vời! Điều này đã tăng thời gian phóng minecraft của tôi từ 12 giây lên 0,5 giây.
Bob

@camikiller Tôi đang thấy 2 giá trị khác nhau cho tên máy chủ so với Chia sẻ> Tên máy tính, vui lòng làm rõ nên sử dụng cái nào?
vikramvi

Giải pháp tốt hơn là nâng cấp hệ điều hành MacOS bạn @vikramvi
camikiller

@camikiller sau đó, tôi đã làm theo apple.stackexchange.com/questions/66611/… , để có cùng tên nhưng nó vẫn không hoạt động. Tôi có cần thực hiện một số cài đặt khác trong Chia sẻ không?
vikramvi

@vikramvi Thử chỉnh sửa bằng tay của bạn /etc/hoststập tin và thêm 2 host
camikiller

6

Tôi có cùng một vấn đề. Ứng dụng khởi động mùa xuân của tôi mất 60 giây để khởi động trên Sierra so với 25 giây trên Yosemite.

Trong khi gỡ lỗi, tôi nhận ra rằng sự cố đến từ InetAddress.getLocalHost (). Tôi đã thay đổi tệp máy chủ của mình để thêm tên máy chủ của tôi cho 127.0.0.1 và :: 1 và bây giờ ứng dụng khởi động nhanh như trước.


2
Xin chào, tôi đã tìm thấy lời giải thích cấp cao này nếu nó hữu ích (nhưng vẫn không rõ điều gì đã thay đổi trong bản phát hành MacOS Sierra): "Khi bạn yêu cầu tên máy chủ, JDK sẽ phân giải nó thành địa chỉ IP. Sau đó, nó sẽ thử tra cứu ngược lại các địa chỉ đó và kiểm tra để đảm bảo rằng ít nhất một trong các kết quả ánh xạ lại tên máy chủ đầu vào. Việc tra cứu ngược này rất chậm. Tính năng này chậm không chỉ giới hạn ở JVM. Bất kỳ thứ gì trên HĐH cố gắng thực hiện tra cứu ngược như vậy sẽ chậm mà không cấu hình thích hợp trong / etc / hosts. " (từ github.com/spring-projects/spring-boot/issues/7087 )
thoeni

3

Bật ví dụ: Tùy chọn hệ thống> Chia sẻ> Đăng nhập từ xa, dẫn đến tên máy chủ được tự động gán địa chỉ IP.

Vì mọi người đang gặp sự cố sau khi nâng cấp, nên giả sử rằng 10.12 đã thay đổi cách giải quyết tên máy chủ, tức là ít nhất với 10.11, tên máy chủ luôn được giải quyết, trong khi với 10.12, nó chỉ được giải quyết nếu một dịch vụ được bật trong Tùy chọn hệ thống> Chia sẻ (ai đó có 10.11 có thể xác nhận điều này).


Tôi đã 10.12.5 nhưng giải pháp của bạn không hoạt động. bạn có những phiên bản nào ?
vikramvi

@vikramvi Tôi có 10.12.6 và đối với cài đặt của tôi, mọi thứ vẫn hoạt động như mô tả. Với tệp / etc / hosts tiêu chuẩn và tính năng chia sẻ bị tắt, ping $ (tên máy chủ) không thành công với lỗi máy chủ lưu trữ không xác định. Với việc bật tính năng chia sẻ, tên máy chủ được phân giải thành IP VLAN của tôi. Đối với Java (8u141), việc gọi InetAddress.getLocalHost () mất 5 giây trong trường hợp chia sẻ bị tắt. Với việc bật tính năng chia sẻ, thời gian thực hiện giảm xuống còn 13ms.
jurajw 27/07/17

Điều này hoạt động (mặc dù thực sự kỳ lạ), về cơ bản ngay cả khi "Đăng nhập từ xa" đã được chọn, hãy bỏ chọn nó, sau đó kiểm tra lại. Mọi thứ bắt đầu hoạt động trở lại. Bạn phải thực hiện một lần / khởi động LOL. Cũng lưu ý rằng nếu bạn đã từng giết quy trình "mDNS" (trước đó), bạn sẽ cần thực hiện thủ thuật này để khôi phục lại địa chỉ .local. Hoặc sử dụng / etc / hosts để có một bản sửa lỗi lâu dài hơn
rogerdpack

1

Tôi nghĩ đó là một vấn đề chung với hệ điều hành mới. Tôi gặp sự cố tương tự: Tôi có một ứng dụng web được triển khai cho tomcat. Trên El Capitan, nó khởi động trong 10 giây, bây giờ phải mất 95 giây và khách hàng (một ứng dụng dành cho máy tính để bàn dựa trên Swing) không thể kết nối với nó (hoặc ít nhất là mất rất nhiều thời gian). Tôi nghĩ rằng nó là một cái gì đó xung quanh giao tiếp mạng, bởi vì một ứng dụng bảng điều khiển thử nghiệm đơn giản chạy tốt.


1
Tắt SIP giải quyết vấn đề của tôi. macossierra-slow.com/…
Andras Gyetvan 23/09/16

1

Đó là một vấn đề kỳ lạ sau khi cài đặt bản cập nhật lên Mac Sierra 10.12 (16A323). Trong tệp máy chủ lưu trữ với bên dưới đã sắp xếp vấn đề.

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

Bạn có thể lấy myhostname bằng lệnh $hostnameở bất kỳ đâu trong thiết bị đầu cuối.


0

Câu trả lời được chấp nhận đã giúp tôi! Chỉ cần thêm điều này ở đây để giải thích những gì tôi nghĩ vấn đề đối với tôi là:

Tên máy chủ của tôi giống như "Máy Mac của tôi" không thể giải quyết được. Trong cài đặt, nó cho tôi thấy rằng máy tính có thể được xử lý bằng mymac.local

Tôi nghĩ đó là không gian và đổi tên mac của tôi thành "my.mac" nhưng ngay cả điều này cũng không giúp ích gì vì dns tự động được thêm vào vẫn là mymac.local

Sau đó, thêm my.mac vào / etc / hosts.

Vì vậy, tôi đoán vấn đề thực sự là gì: Điều này chỉ xảy ra khi tên máy tính của bạn chứa bất kỳ thứ gì không phải là chữ cái. Điều này tự động bị xóa bởi hệ điều hành và sau đó tên máy chủ và mục nhập dns không khớp. (có thể được sửa lỗi khi tôi thêm nó theo cách thủ công)


1
Tôi nghĩ rằng vấn đề chạy sâu hơn ... hostname của tôi là tất cả các chữ alpha bình thường, nhưng thêm nó vào / etc / hosts giải quyết một loạt các vấn đề kỳ lạ đối với tôi
Magnus

0

Tôi đã gặp vấn đề tương tự trên máy Mac của mình.

Khi tôi thay đổi tên máy chủ chính và Bonjour của mình để chỉ chứa các ký tự chữ và số, nó đã giải quyết được vấn đề. Ý tưởng đến từ một đồng nghiệp, người đã đọc được lời khuyên ở đâu đó khi anh ta đang đối mặt với một vấn đề tương tự (anh ta không thể nhớ ở đâu).

Lấy cảm hứng từ hướng dẫn này, tôi đã làm theo các bước sau:

Đầu tiên, thay đổi tên máy chủ chính

sudo scutil --set HostName <new host name>

ví dụ:

sudo scutil --set HostName eggsandwich

Tiếp theo, thay đổi tên máy chủ của Bonjour (để hoàn chỉnh, tôi chưa bao giờ thử nếu không có bước này nên có thể không cần thiết).

sudo scutil --set LocalHostName <new host name>

ví dụ:

sudo scutil --set LocalHostName eggsandwich

Bây giờ hãy khởi động lại các quy trình java mà bạn đang gặp sự cố và hy vọng chúng không còn bị treo nữa.

Một lưu ý nhỏ, điều này cũng giải quyết một vấn đề khác mà tôi gặp phải khi một tab mới trong Terminal sẽ không bắt đầu bash trong cùng một thư mục bất chấp tùy chọn của tôi. Tôi không có lời giải thích tại sao điều đó lại xảy ra, nhưng tôi rất hài lòng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.