jvm dns缓存问题解决方式

18e113824792485bb7d5cafd65ef01b5.jpg在主机名解析为 IP 地址后,资源 IP 地址将保存在 JVM 的高速缓存中。如果改变了资源的 IP 地址,则需要重新启动应用服务器,使 Identity Manager 能够检测所做更改 (ID-3635)。这是 Sun JDK(1.3 及更高版本)中的设置,可以使用 sun.net.inetaddr.ttl 属性(通常在 jre/lib/security/java.security 中设置)控制

 

 

//设置解析成功的域名记录JVM中缓存的有效时间,JVM默认是永远有效,这样一来域名IP重定向必须重启JVM,这里修改为5秒钟有效,0表示禁止缓存,-1表示永远有效

java.security.Security.setProperty("networkaddress.cache.ttl", "5");

 

//设置解析失败的域名记录JVM中缓存的有效时间,JVM默认是10秒,0表示禁止缓存,-1表示永远有效

 

java.security.Security.setProperty("networkaddress.cache.negative.ttl","2");

 

还有两种方式设置dns缓存

1.在JAVA_OPTS里设置

-Dsun.net.inetaddr.ttl=3 -Dsun.net.inetaddr.negative.ttl=1

2.修改property

System.setProperty("sun.net.inetaddr.ttl", "3");

System.setProperty("sun.net.inetaddr.negative.ttl", "1");

 

 

一般情况下我们不需要完全取消JVM的DNS缓存,只需要调小有效时间,经过一些测试发现一下结论:

1)1个域名对应一个IP和一个域名对应12个IP,DNS查询响应时间差别极少,后者占用cpu稍高一点点;

2)在高并发时,不做DNS缓存时的CPU耗用比做了3s缓存的CPU耗用要高3/4倍,实时DNS请求相当耗用CPU;

3)3s和30s缓存有效时间对dns查询响应时间的影响差别不大,cpu内存占用都比较接近;

4)建议使用3秒缓存,兼顾运维和性能;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值