java cache dns
- 在 jvm 层面是否会对dns解析结果进行缓存
- 研究方法: 写一个http 请求,定时请求固定网站数据,设置dns 过期时间,通过tcpdump port 53 | grep 网站地址 查看结果集
-
正常使用Java -jar 启动的时候,发现upd 53 端口每隔30秒刷新一次dns 请求,验证了networkaddress.cache.ttl 不进行设置的时候,
系统的默认过期时间是30s
启动
具体日志
tcpdump result
- 使用java -jar -Dnetworkaddress.cache.ttl=10 启动之后,发现udp 53 接口,每10秒刷新一次dns 请求,如果设置成-1 的话,一直不刷新请求
-
使用java -jar -Dnetworkaddress.cache.ttl=10 -Dsun.net.inetaddr.ttl=5 启动之后,发现udp 53 接口,每5秒请求一次
启动
具体日志
tcpdump result
- 总结: 在jvm 层面进行了dns 缓存处理,默认为30s 为过期时间,如果进行手动的设置的话,可以选择其一种启动方式进行,也可以两种方式都使用,
但是注意优先级问题。使用sun.net.inetaddr.ttl 是系统级参数,networkaddress.cache.ttl 是安全等级的参数,在代码里进行获取的时候,方式不同