文档章节

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

attobit
 attobit
发布于 2016/09/30 15:43
字数 468
阅读 149
收藏 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
几个著名的Java开源缓存框架

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

learn_more
2015/03/16
0
2
Ehcache和MemCached比较分析

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

浮躁的码农
2015/07/24
0
0
JVM内存模型及垃圾收集策略解析

AD: JVM内存模型是Java的核心技术之一,之前51CTO曾为大家介绍过JVM分代垃圾回收策略的基础概念,现在很多编程语言都引入了类似Java JVM的内存模型和垃圾收集器的机制,下面我们将主要针对J...

LEON_SHI
2014/08/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

49.Nginx防盗链 访问控制 解析php相关 代理服务器

12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置(502的问题) 12.16 Nginx代理 扩展 502问题汇总 http://ask.apelearn.com/question/9109 location优先级 http://blog....

王鑫linux
今天
1
0
Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
0
0
spring EL 和资源调用

资源调用 import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.PropertySource;import org.springframework.core.io.Resource;......

Canaan_
今天
1
0
memcached命令行、memcached数据导出和导入

一、memcached命令行 yum装telnet yum install telent 进入memcached telnet 127.0.0.1 11211 命令最后的2表示,两位字节,30表示过期时间(秒) 查看key1 get key1 删除:ctrl+删除键 二、m...

Zhouliang6
今天
1
0
Linux定时备份MySQL数据库

做项目有时候要备份数据库,手动备份太麻烦,所以找了一下定时备份数据库的方法 Linux里有一个 crontab 命令被用来提交和管理用户的需要周期性执行的任务,就像Windows里的定时任务一样,用这...

月夜中徘徊
今天
1
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部