새소식

반응형
Java

[Java] JVM DNS Caching TTL 설정(networkaddress.cache.ttl)

  • -
반응형

 

도메인명에 매핑된 ip 정보가 있을 텐데 이를 캐싱처리를 하는 것이 -> DNS Caching

JVM단에서 이러한 캐싱 처리를 하고 있으니 -> JVM DNS Caching 

 

VIP, GSLB와 같은 기능을 이용하는 경우 상황에 따라서

VIP의 경우에는 RIP가 변경될 수 도 있고

GSLB의 경우에는 매핑이나 비율이 바뀌어야 되는데 

캐싱처리 영향으로 의도한 바가 정확히 동작하지 않을 수 있다.

보통의 HA(high availabilty)(고가용성)을 이루기 위해 VIP, GSLB 등을 사용한다. 

 

이러한 상황을 방지하기 위해서 TTL 설정이 필요하다.

 

설정 방법

Java 8 버전 $JAVA_HOME/jre/lib/security/java.security

8 버전 이상 $JAVA_HOME/conf/security/java.security 

networkaddress.cache.ttl=5             # 성공한 DNS 룩업에 대해 캐싱 여부
networkaddress.cache.negative.ttl # 실패한 DNS 룩업에 대해 캐싱 여부

 

설정값이 -1이면 TTL이 무한이고, 0이면 캐싱을 하지 않고 매번 조회한다는 의미이다. 

 

InetAddressCachePolicy

해당 캐시값을 처리하는 코드를 확인해 보면 아래와 같다

  • security의 설정 값을 먼저 읽고
  • 없으면
  • system의 설정 값을 읽는다 (sun.net.inetaddr.ttl)
  • 없으면
  • 디폴트 30초! 
static {
        Integer tmp = java.security.AccessController.doPrivileged(
          new PrivilegedAction<Integer>() {
            public Integer run() {
                try {
                    String tmpString = Security.getProperty(cachePolicyProp);
                    if (tmpString != null) {
                        return Integer.valueOf(tmpString);
                    }
                } catch (NumberFormatException ignored) {
                    // Ignore
                }

                try {
                    String tmpString = System.getProperty(cachePolicyPropFallback);
                    if (tmpString != null) {
                        return Integer.decode(tmpString);
                    }
                } catch (NumberFormatException ignored) {
                    // Ignore
                }
                return null;
            }
          });

        if (tmp != null) {
            cachePolicy = tmp < 0 ? FOREVER : tmp;
            propertySet = true;
        } else {
            /* No properties defined for positive caching. If there is no
             * security manager then use the default positive cache value.
             */
            if (System.getSecurityManager() == null) {
                cachePolicy = DEFAULT_POSITIVE;
            }
        }
}
반응형

'Java' 카테고리의 다른 글

[Java] GC 관련 metric 모니터링  (0) 2025.04.02
[Java] 17 버전 주요기능  (0) 2025.03.29
[Java] JVM 옵션 정리  (0) 2024.04.21
[Java] 다형성 serialize (jackson, JsonTypeInfo)  (0) 2024.04.13
[Java] ForkJoinPool 에러 발생 in Java11  (1) 2024.03.11
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.