美文网首页
【jvm&DNS】关于java dns cache

【jvm&DNS】关于java dns cache

作者: Bogon | 来源:发表于2021-11-02 00:12 被阅读0次

我们上网的原点就是打开浏览器,在上方地址栏输入网址的那一刻,这个回车按了之后,发生了很多事情。

首先,计算机只懂0和1,也就是说人类的字母网址计算机是不懂的,它只认识IP地址,如果是IPV4那就是4组8位的二进制数字。

为了人类方便,需要有一个把网址翻译成IP地址的服务,就是DNS。

这是一个高度简略的示意图,实际上DNS整个获取过程是被层层缓存的,一个DNS的获取并不一定都是从权威处获得的响应。

域名解析并非一个简单的过程,其解析结果可能会被层层缓存,如浏览器 DNS 缓存、操作系统 DNS 缓存、ISP 的 DNS缓存,容易被忽略的是 JVM 本身也会对 DNS 进行缓存。

某java应用频繁因网络问题而出现故障,同时也抛出一个问题:JAVA本身对DNS的缓存时间是多久?

对于这个疑问,第一反应Google之,大致有两种说法:

第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也变化。

几种修改缓存时间的方法:

1. jvm启动参数里面配置-Dsun.net.inetaddr.ttl=value

2. 修改 配置文件JAVA_HOME/jre/lib/security/java.security相应的参数networkaddress.cache.ttl=value

3. 代码里直接设置:java.security.Security.setProperty(”networkaddress.cache.ttl” , “value”)

参考

JVM and OS DNS Caching

https://stackoverflow.com/questions/17362758/jvm-and-os-dns-caching

elastisearch dns cache settings

https://www.elastic.co/guide/en/elasticsearch/reference/7.5/networkaddress-cache-ttl.html

Networking Properties/Java Properties

https://docs.oracle.com/javase/6/docs/technotes/guides/net/properties.html#nct

How to make Java honor the DNS Caching Timeout?

https://stackoverflow.com/questions/1256556/how-to-make-java-honor-the-dns-caching-timeout

设置 DNS 名称查找的 JVM TTL

https://docs.amazonaws.cn/sdk-for-java/latest/developer-guide/jvm-ttl-dns.html

JVM and OS DNS Caching

http://coddingbuddy.com/article/20978349/jvm-and-os-dns-caching

Java DNS Cache Reference Guide

http://javaeesupportpatterns.blogspot.com/2011/03/java-dns-cache-reference-guide.html

How to configure DNS caching using networkaddress.cache.ttl?

http://docs.oracle.com/javase/6/docs/api/java/net/InetAddress.html

http://kenwublog.com/java-dns-cache-setting

http://stackoverflow.com/questions/1835421/java-dns-cache-viewer

http://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/Security_on_JBoss-Running_JBoss_with_a_Java_2_security_manager.html

相关文章

  • 【jvm&DNS】关于java dns cache

    我们上网的原点就是打开浏览器,在上方地址栏输入网址的那一刻,这个回车按了之后,发生了很多事情。 首先,计算机只懂0...

  • # Java DNS Cache

    Cache Type DNS的缓存类型分为两种:Positive和Negative,Positive用于缓存可以正...

  • Mac 刷新DNS

    Reset the DNS cache in OS X 关于DNS缓存 OS X在DNS服务器定义的时间内保留已解...

  • DNS解析步骤

    1.应用发起基于域名的请求后,linux先查询本地dns cache。 2.本地dns cache命中(cache...

  • DNS缓存服务 — NSCD

    原文:https://www.fanhaobai.com/2017/06/nscd-dns-cache.html ...

  • 浏览器输入 URL 请求的全过程

    浏览器输入 URL 请求的全过程 1. DNS 解析 按照一下顺序进行 DNS 解析: Browser cache...

  • Android-UIL-cache

    Cache pkg cache包目录 disk cache 1.DiskCache.java 该接口是本地内存操作...

  • 题目

    1.dns(解析域名)--tcp3次握手--request-cache-response--构建:DOM 树(节点...

  • Reset the DNS cache in OS X

    https://support.apple.com/en-us/HT202516 Use the followin...

  • Springboot Redis @Cacheable

    java.lang.IllegalStateException: No cache could be resolv...

网友评论

      本文标题:【jvm&DNS】关于java dns cache

      本文链接:https://www.haomeiwen.com/subject/mwtxzltx.html