developer tip

InetAddress.getLocalHost () 실행 속도가 느림 (30 초 이상)

copycodes 2021. 1. 10. 17:28
반응형

InetAddress.getLocalHost () 실행 속도가 느림 (30 초 이상)


다음 코드로 :

try {
  System.out.println(new Date());
  InetAddress hostName = InetAddress.getLocalHost();
  System.out.println(new Date());
} catch (UnknownHostException e) {
  e.printStackTrace();
}

이 출력을 얻습니다.

Thu Oct 22 20:58:22 BST 2015
Thu Oct 22 20:58:52 BST 2015

즉, 실행하는 데 30 초가 걸립니다. Machine은 Java 1.8.0_60이 설치된 2015 Macbook Pro입니다.

왜 이렇게 오래 걸리나요?


이 문제는 / etc / hosts에 다음을 추가하여 해결할 수 있습니다 (호스트 이름이 다음과 같다고 가정) macbook.

127.0.0.1   macbook
::1         macbook

이렇게하면 시간이 더 적합한 것으로 반환됩니다 (<1 초).


이 문제는 Java8을 사용하는 MacOS Sierra에서 나타납니다. 업데이트는 60 이상 (jdk1.8.0_60.jdk, jdk1.8.0_77.jdk 등)입니다.

솔루션은 여기에서 찾을 수 있습니다 : https://github.com/thoeni/inetTester .

이것은 내 / etc / hosts 파일의 내용입니다.

127.0.0.1   localhost mac.local
::1         localhost mac.local

제 경우에는 mac 이 제 컴퓨터 이름입니다.


여기서 지연은 DNS 확인 시도가 실패했기 때문이라고 생각합니다. DNS 서버가 올바르게 구성되지 않았을 수 있습니다. 30 초는 아마도 DNS 확인의 시간 초과를 나타냅니다.

솔루션이 속도를 향상시킨 이유는 호스트 파일에 항목을 추가하면 호스트 이름을 로컬에서 확인할 수 있으므로 실제 (원격) DNS 서버에 대해 호스트 이름을 확인하려는 시도를 건너 뛰기 때문입니다.

편집 :이 방법이 호스트 확인을 수행하는 이유가 궁금 할 수 있습니다. 분명히 이것은 자바 네트워킹 라이브러리에 내장 된 스푸핑 방지 메커니즘의 일부입니다. 자세한 내용은이 게시물의 승인 된 답변을 참조하십시오. InetAddress.getCanonicalHostName ()은 호스트 이름 대신 IP를 반환합니다.


Java 1.8.0_92 및 1.80_112가 설치된 MacBook Pro에서는이 문제가 여전히 존재하며 InetAddress.getLocalhost () 호출에 5 초 이상이 필요합니다. 수정 된 / etc / hosts가있는 솔루션이 작동하지 않습니다. Java 1.8.0_051로 다시 전환하면이 문제가 해결됩니다.


위의 답변은 내 Mac에서 작동하며 다음과 같이 시도해 볼 수 있습니다.

1 단계, 여기에 링크 설명 입력 에서 inetTester.jar 다운로드

2 단계, Mac에서 실행합니다. 내 Mac의 결과는 다음과 같습니다.

$ java -jar ./inetTester.jar
Calling the hostname resolution method...
Method called, hostname MacBook-Pro.local, elapsed time: 5009 (ms)

테스트를 실행하는 데 5 초가 걸리며 내 Mac의 호스트 이름이 표시됩니다.

3 단계, / etc / hosts를 수정합니다.

127.0.0.1   MacBook-Pro.local
::1         MacBook-Pro.local

호스트는 2 단계에 표시된 것입니다. 그런 다음 테스트를 다시 실행하십시오.

$ java -jar ./inetTester.jar
Calling the hostname resolution method...
Method called, hostname MacBook-Pro.local, elapsed time: 6 (ms)

네, 6ms 만 제공됩니다. 5 초-> 6ms, 좋습니다.

참조 URL : https://stackoverflow.com/questions/33289695/inetaddress-getlocalhost-slow-to-run-30-seconds

반응형