------------------------------------------------------------------------------------------------
출처: http://kwon37xi.egloos.com/4455415
------------------------------------------------------------------------------------------------
JVM은 일단 실행되면 그 이후부터의 도메인 네임을 통한 네트워크 접속시 DNS 정보를 캐싱한다.
그것도 JVM을 재시작 할 때까지 영원히 캐싱한다.
요즘 OpenAPI를 사용하는 경우가 많은데, 이 JVM의 DNS 캐시는 OpenAPI를 제공하는 서버의 IP 주소가 갑자기 바뀌었을 경우 문제를 일으킬 수 있다. Java 웹 서버를 운영할 때 상대방 OpenAPI 서버의 IP가
바뀌면 웹 서버를 껐다 켜야만 DNS 정보가 갱신되어 그제서야 API 서버에 제대로 접속이 된다.
따라서 OpenAPI 를 사용하는 웹 서비스로 만들 경우에는 DNS 캐시 기능을 끄거나 캐싱 시간을 조정할
필요가 있다.
관련 정보 :
- SAP 블로그 : Controlling DNS Caching in the Java Virtual Machine
- reCAPTCHA Java API 문서 - reCAPTCHA 서버가 가끔 IP를 바꿔서 이런문제가 발생한다고 한다.
- 더 자세한 설명 : http://www.rgagnon.com/javadetails/java-0445.html
가장 간단한 해결 방법은 Java 실행 옵션에 시스템 프라퍼티를 지정하는 것이다.
아래는 DNS 캐싱 시간을 30초로 지정한다. SUN/Oracle JVM에 한한다.
java -Dsun.net.inetaddr.ttl=30
Tomcat의 경우에는 $CATALINA_HOME/bin/setenv.sh 파일에서 CATALINA_OPTS 혹은 JAVA_OPTS
환경 변수를 지정하고 위의 프라퍼티를 지정한다.
다음 방법은 Java 1.4 이상 버전에서 jre/lib/security/java.security 파일에 프라퍼티를 추가하는 것이다. 기본값은 -1이며 영원히 캐싱한다는 의미이다. 다음은 30초간 캐싱한다고 지정한다. 0은 캐시를 끈다.
networkaddress.cache.ttl=30
프로그램적으로도 가능하다.
java.security.Security.setProperty("networkaddress.cache.ttl" , "30");
'IT_Programming > Java' 카테고리의 다른 글
Java Closure Example (0) | 2011.05.12 |
---|---|
[펌] 멀티코어 시스템의 Java 동시성 버그 패턴 (0) | 2011.04.20 |
커스텀 DecoratorMapper를 이용한 SiteMesh URL 패턴 매칭 기능 확장 (0) | 2011.04.03 |
Java Database Connectivity에 대해 모르고 있던 5가지 사항 (0) | 2011.03.29 |
[펌] 자바 1.4의 새기능: Assertion (0) | 2011.03.11 |