Jvm은 localhost의 IP 주소를 확인하는 데 오랜 시간이 걸립니다.


112

macOS Sierra로 업그레이드 한 후 "sbt 테스트"(로컬 호스트 이름 / IP 주소 조회 포함) 성능에 문제가있는 것 같습니다. 이전 버전의 OS X에서는 완료하는 데 약 40 ~ 50 초가 걸렸습니다. macOS Sierra 시간은 그보다 훨씬 높습니다. 내가 한 마지막 실행은 약 15 분이었습니다. 컴파일 시간은 'El Capitan'과 거의 같습니다.

이 새로운 macOS를 사용해 본 팀의 유일한 사람이므로 Mac에서만 발생하는지 아니면 일반적인 문제인지 알 수 없습니다.

제 동료는 우분투에서 비슷한 문제를 가지고 있었고 난수 생성이 테스트 속도를 늦추는 것과 관련이있었습니다- 느린 서비스 응답 시간 : Java SecureRandom & / dev / random

불행히도 그것은 나를 위해 작동하지 않았습니다. 원래 JDK 8u54에서 시도한 다음 JDK 8u102로 업데이트를 시도했지만 도움이되지 않았습니다.

추신 : Macbook Pro Mid-2015 2.8GHz i7, 16GB ram, 1TB SSD를 실행하고 있습니다.


나는 gradle clean test동일한 문제를 사용 하고 있습니다.
Max Peng

OpenJDK에보고 된 버그입니다. bugs.openjdk.java.net/browse/JDK-8143378 수정되지 않을 다른 버그의 중복으로 해결되었습니다. 다시 열어야합니다.
Lóránt Pintér

답변:


326

나는 같은 문제가 있었다. Tomcat은 업그레이드 후 스프링 컨텍스트를 초기화하는 데 15 초에서 6 분으로 걸렸습니다. csrutils를 비활성화해도 문제가 해결되지 않았습니다.

내가 해결 온 (Mac이라고 어떤 즉 Macbook.local, 또는) 내 맥 호스트 이름을 추가하여 문제를 /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가 즉시 구현하고 작동 했던 것과 동일 했습니다.


같은 문제 ... SIP 비활성화가 나에게도 효과가 없음을 확인할 수 있습니다.
borges

잘 작동합니다. github 프로젝트 github.com/thoeni/inetTester
christmo

21
그것을 발견! Mac 이름이 아닙니다. 호스트 이름입니다. 터미널에 "hostname"을 입력하면 올바른 호스트 이름을 제공 할 수 있습니다.
VK321

1
몇 년 후 OSX 10.14.2에서 여전히 이것을 볼 수 있습니다. 수정 해주셔서 감사합니다.
Malcolm Crum

1
macOS Mojave 10.14.4, 여전히 문제입니다. localhostIPv4 및 IPv6 루프백 행 ( 127.0.0.1, ::1) 뒤에 호스트 이름을 추가하는 것이 여전히 확인되었습니다.
Dog

43

정답 : Jvm은 localhost의 ip-address를 확인하는 데 오랜 시간이 걸립니다.

게으른 사람들을 위해 :

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
대박! 이로 인해 내 마인 크래프트 시작 시간이 12 초에서 0.5 초로 늘어났습니다.
Bob

@camikiller 호스트 이름과 공유> 컴퓨터 이름에 대해 2 개의 다른 값이 표시됩니다. 어떤 값을 사용해야하나요?
vikramvi

더 나은 솔루션은 맥 OS @vikramvi 업그레이드하는 것입니다
camikiller

@camikiller 후에 나는 당 한 apple.stackexchange.com/questions/66611/... 같은 이름을 가지고 있지만, 여전히 작동하지 않습니다. 공유에서 다른 설정을해야합니까?
vikramvi

수동으로 편집하십시오 @vikramvi /etc/hosts파일을하고이 개 호스트를 추가
camikiller

6

나도 같은 문제가있어. 내 봄 부팅 응용 프로그램은 Sierra에서 시작하는 데 60 초가 걸리고 Yosemite에서는 25 초가 걸립니다.

디버깅하는 동안 문제가 InetAddress.getLocalHost ()에서 비롯된다는 것을 깨달았습니다. 127.0.0.1 및 :: 1에 대한 호스트 이름을 추가하도록 호스트 파일을 변경했으며 이제 응용 프로그램이 이전처럼 빠르게 시작됩니다.


2
안녕하세요, 도움이된다면 다음과 같은 높은 수준의 설명을 찾았습니다 (MacOS Sierra 릴리스에서 변경된 사항은 아직 명확하지 않습니다). "호스트 이름을 요청하면 JDK가이를 IP 주소로 확인합니다. 그런 다음 해당 주소의 역방향 조회를 시도합니다. 결과 중 하나 이상이 입력 호스트 이름에 다시 매핑되는지 확인합니다. 느린 역방향 조회입니다. 속도는 JVM에만 국한되지 않습니다. 이러한 역방향 조회를 수행하려는 OS의 모든 것은 / etc / hosts에서 적절한 구성. " (from github.com/spring-projects/spring-boot/issues/7087 )
thoeni

3

예를 들어 시스템 환경 설정> 공유> 원격 로그인을 활성화하면 호스트 이름에 IP 주소가 자동으로 할당됩니다.

사람들이 업그레이드 후 문제를보고 있으므로 10.12가 호스트 이름 확인 방법을 변경했다고 가정하는 것이 합리적입니다. 즉, 적어도 10.11에서는 호스트 이름이 항상 확인되는 반면 10.12에서는 시스템 기본 설정에서 서비스가 활성화 된 경우에만 해결됩니다. 공유 (10.11 사용자가이를 확인할 수 있음).


나는 10.12.5이지만 귀하의 솔루션이 작동하지 않았습니다. 어떤 버전이 있습니까?
vikramvi

@vikramvi 나는 10.12.6을 가지고 있으며 설치를 위해 설명대로 작동합니다. 표준 / etc / hosts 파일 및 공유가 비활성화 된 경우 ping $ (hostname) 이 알 수없는 호스트 오류와 함께 실패합니다. 공유가 활성화되면 호스트 이름이 내 VLAN의 IP로 확인됩니다. Java (8u141)의 경우 공유가 비활성화 된 경우 InetAddress.getLocalHost () 호출에 5 초가 걸립니다. 공유를 활성화하면 실행 시간이 13ms로 떨어집니다.
jurajw

이것은 작동합니다 (정말 이상 하긴하지만), 기본적으로 "원격 로그인"이 이미 선택되어 있어도 선택 취소 한 다음 다시 확인하십시오. 일이 다시 시작됩니다. 한 번 / 부팅 LOL을 수행해야합니다. 또한 "mDNS"프로세스 (이전)를 한 번 죽인 적이 있다면이 트릭을 수행하여 .local 주소를 다시 가져와야합니다. 또는보다 영구적 인 수정을 위해 / etc / hosts 방식을 사용하십시오
rogerdpack

1

새로운 OS의 일반적인 문제라고 생각합니다. 비슷한 문제가 있습니다. tomcat에 배포 된 웹 응용 프로그램이 있습니다. El Capitan에서는 10 초 만에 시작되었지만 이제 95 초가 걸리고 클라이언트 (Swing 기반 데스크톱 앱)가 연결할 수 없습니다 (또는 최소한 많은 시간이 걸렸습니다). 간단한 테스트 콘솔 앱이 잘 실행되기 때문에 네트워크 통신과 관련된 것이라고 생각합니다.


1
SIP를 끄면 문제가 해결됩니다. macossierra-slow.com/...
안드라스 Gyetvan에게

1

에 업데이트를 설치 한 후 이상한 문제였습니다 Mac Sierra 10.12 (16A323). 아래의 호스트 파일에서 문제를 정렬했습니다.

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

터미널 어디에서나 명령으로 myhostname 을 가져올 수 있습니다 $hostname.


0

받아 들여진 대답이 도움이되었습니다! 여기에 추가하면 문제가 무엇이라고 생각하는지 설명합니다.

내 호스트 이름은 "내 Mac"과 같은 것으로 확인할 수 없습니다. 설정에서 컴퓨터가 mymac.local로 주소 지정 될 수 있음을 보여주었습니다.

나는 그것이 공간이라고 생각하고 내 mac의 이름을 "my.mac"로 바꿨지 만 자동으로 추가 된 DNS가 여전히 mymac.local이기 때문에 도움이되지 않았습니다.

my.mac을 / etc / hosts에 추가하면 도움이되었습니다.

그래서 제 생각에는 실제 문제가 무엇인지 : 이것은 컴퓨터 이름에 문자가 아닌 것이 포함 된 경우에만 발생합니다. 이것은 os에 의해 자동으로 제거되고 호스트 이름과 dns 항목이 일치하지 않습니다. (수동으로 추가하여 수정할 수 있음)


1
문제가 그보다 더 깊다고 생각합니다 ... 제 호스트 이름은 모두 정상적인 영문자 였지만 / etc / hosts에 추가하면 여러 가지 이상한 문제가 해결되었습니다
Magnus

0

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를 시작하지 않는 또 다른 문제를 해결했습니다. 왜 그런 일이 일어 났는지에 대한 설명은 없지만 매우 기쁩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.