文档章节

Java DNS解析缓存的过期策略配置

attobit
 attobit
发布于 2016/09/30 15:43
字数 468
阅读 188
收藏 0

根据这篇文章的分析,Java代码中调用InetAddress.getByName(host)进行域名解析后(可能得到有效解析结果,也可能解析失败),会将结果数据保存到缓存中。当下次域名解析时,如果缓存中数据未过期,可以直接使用缓存数据。

而缓存数据的过期策略,可以通过下面的方式配置:

  1. 如果开启了SecurityManager,会从${java.home}/jre/lib/security/java.security中读取配置项:   
    有效结果缓存时间配置:networkaddress.cache.ttl (缺省值30,单位秒)
    失败结果缓存时间配置:networkaddress.cache.negative.ttl (缺省值10,单位秒)
  2. 如果未开启SecurityManager,会从启动参数读取配置项:
    有效结果缓存时间配置:sun.net.inetaddr.ttl
    失败结果缓存时间配置:sun.net.inetaddr.negative.ttl
  3. 以上配置未生效情况下,缺省配置是:        
    有效结果缓存时间:-1(永不过期)
    失败结果缓存时间:0(立刻过期,即不做缓存)

这个缺省配置在实践中会出问题:如果域名解析发生变更,但因为有效结果缓存永不过期,应用一直使用旧的解析结果,会导致连接异常等错误(类似java.net.ConnectException: Tried all: '1' addresses, but could not connect over HTTP to server)。如果域名解析失败,对失败结果不做缓存,可能会出现持续解析失败,这种情况往往降低可用性。

本文参考的源码及配置为Java1.8版本。进一步了解SecurityManager,请参考。  

**最佳实践**:java.security的缺省配置比较合理,如果不确定应用是否开启了SecurityManager,可以在Java Options中将相关启动参数配置成60/10,保持和java.security的缺省配置一致。

© 著作权归作者所有

共有 人打赏支持
attobit
粉丝 0
博文 6
码字总数 1858
作品 0
深圳
关于java的DNS解析IP缓存问题

java对DNS解析IP进行缓存,默认缓存超时时间为-1(在重启JVM前永久缓存), 在第一次访问某域名后将会缓存解析到的IP地址,之后直接从缓存里获得所需的信息(如IP地址),而无需再访问DNS服务...

Sub
2013/08/09
0
0
注册中心 Eureka 源码解析 —— 应用实例注册发现(六)之全量获取

摘要: 原创出处 http://www.iocoder.cn/Eureka/instance-registry-fetch-all/ 「芋道源码」欢迎转载,保留摘要,谢谢! 本文主要基于 Eureka 1.8.X 版本 1. 概述 2. Eureka-Client 发起全量获...

芋道源码
06/02
0
0
Ehcache和MemCached比较分析

项目 Memcache Ehcache 分布式 不完全,集群默认不实现 支持 集群 可通过客户端实现 支持(默认是异步同步) 持久化 可通过第三方应用实现,如sina研发的memcachedb,将cache的数据保存到[ur...

浮躁的码农
2015/07/24
0
0
几个著名的Java开源缓存框架

OSCache   OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。 OSCache有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或...

learn_more
2015/03/16
0
2
关于MySQL DNS解析探究之一:DNS解析确实在起作用

机器A --> 192.168.103.94 -- 服务器 机器B --> 192.168.4.2 -- 客户端 机器A => 装上mysql-server,启动; 使用root用户登录,查看DNS解析是否开启,执行如下命令: mysql> show variables ......

囚兔
2015/08/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
1
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
19
0
学习设计模式——观察者模式

1. 认识观察者模式 1. 定义:定义对象之间一种一对多的依赖关系,当一个对象状态发生变化时,依赖该对象的其他对象都会得到通知并进行相应的变化。 2. 组织结构: Subject:目标对象类,会被...

江左煤郎
昨天
1
0
emoji

前言:随着iOS系统版本的升级,对原生emoji表情的支持也越来越丰富。emoji表情是unicode码中为表情符号设计的一组编码,当然,还有独立于unicode的另一套编码SBUnicode,在OS系统中,这两种编...

HeroHY
昨天
2
0
rabbitmq学习(二)

生产者消费者初级案列 ChannelUtils package com.hensemlee.rabbitmq;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.Connecti......

hensemlee
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部