Java DNS缓存
jdk1.5和1.5之前版本
默认DNS缓存时间是永久缓存
jdk 1.6以后
与security manager策略有关。
如果没有启用security manager,默认解析成功的DNS缓存时间为30秒,解析失败的DNS缓存时间为10秒。
策略配置文件:JAVA_HOME/jre/lib/security/java.policy
注意事项
对于多条A记录DNS,在缓存有效期内,取到的IP永远是缓存中全部A记录的第一条,并没有轮循之类的策略。
缓存失效之后重新进行DNS解析,如果每次域名解析返回的A记录顺序会发生变化,缓存中的数据顺序也会发生变化,取到的IP也变化。
缓存修改方法
- jvm启动参数里面配置-Dsun.net.inetaddr.ttl=value
- 修改配置文件$JDK_HOME/lib/security/java.security相应的参数networkaddress.cache.ttl=value
- 代码里直接设置:java.security.Security.setProperty(”networkaddress.cache.ttl” , “value”);