Java 默认会把域名解析结果缓存多久?改了 networkaddress.cache.ttl 会怎样?失败的解析呢?这篇用独立的 JVM 在不同时刻重复解析同一个域名,把缓存的有效期实测出来(服务切换后迟迟不生效的问题经常源自这里)。
[默认(不设任何 networkaddress.cache 属性)]
t=0s:70.580 ms | t=1s:0.485 ms | t=10s:0.139 ms | t=29s:0.293 ms | t=31s:1.698 ms
[networkaddress.cache.ttl = 2]
t=0s:58.160 ms | t=1s:0.338 ms | t=3s:1.823 ms
[networkaddress.cache.ttl = 0(不缓存)]
t=0s:56.956 ms | t=0.5s:3.294 ms | t=1s:3.523 ms
[默认,一个不存在的域名(负缓存)]
t=0s:115.210 ms | t=5s:0.345 ms | t=9s:0.227 ms | t=11s:4.079 ms
[negative.ttl = 0(不缓存失败的解析)]
t=0s:100.201 ms | t=1s:1.956 ms | t=2s:3.831 msnetworkaddress.cache.ttl = null(null 表示 java.security 里没有写,用 JVM 内置默认值);networkaddress.cache.negative.ttl = 10;sun.net.inetaddr.ttl 系统属性 = null