- Connection reset by peer 对端连接断开,https://blog.csdn.net/xc_zhou/article/details/80950753
- java默认DNS缓存时间是多久? ```java 第1种:默认情况下networkaddress.cache.ttl=-1,代表永久缓存(配置文件路径: ${JAVA_HOME}/jre/lib/security/java.security),就是在应用启动之后第一次DNS 解析成功的结果会一直cache到应用停止。显然在域名对应的IP有变更的时候,如果不重启应用就会造成故障。
第2种:jdk1.5和1.5之前的版本默认DNS 缓存时间是永久缓存,jdk 1.6以后与security manager策略有关(jboss tomcat 等app server默认不启用),如果没有启用security manager ,默认DNS 缓存时间30秒(策略配置文件:JAVA_HOME/jre/lib/security/java.policy)。
JVM 的 DNS 缓存可以通过以下参数进行配置:
networkaddress.cache.ttl
sun.net.inetaddr.ttl
如果开启了 SecurityManager,优先从 ${java.home}/jre/lib/security/java.security 中读取参数 networkaddress.cache.ttl,单位为秒。
如果未读取到,则会读取启动参数 sun.net.inetaddr.ttl 作为缓存 ttl.
如果以上参数均未读取到,并且未开启 SecurityManager,则会使用默认值 30s.
否则使用初始值 -1,表示永久生效。
除了解析成功的结果,JVM 也会缓存解析失败的结果,可以通过下列参数配置:
networkaddress.cache.negative.ttl
sun.net.inetaddr.negative.ttl
在缓存有效期内,取到的IP永远是缓存中全部A记录的第一条,并没有轮循之类的策略。
缓存失效之后重新进行DNS解析,因为每次域名解析返回的A记录顺序会发生变化(dig www.example.com测试可见),所以缓存中的数据顺序也变了,取到的IP也变化。
几种修改缓存时间的方法:
jvm启动参数里面配置-Dsun.net.inetaddr.ttl=value
修改 配置文件JAVA_HOME/jre/lib/security/java.security相应的参数networkaddress.cache.ttl=value
代码里直接设置:java.security.Security.setProperty(”networkaddress.cache.ttl” , “value”) ```