在主機名解析為 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");
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)1個域名對應一個IP和一個域名對應12個IP,DNS查詢響應時間差別極少,后者占用cpu稍高一點點;
2)在高並發時,不做DNS緩存時的CPU耗用比做了3s緩存的CPU耗用要高3/4倍,實時DNS請求相當耗用CPU;
3)3s和30s緩存有效時間對dns查詢響應時間的影響差別不大,cpu內存占用都比較接近;
4)建議使用3秒緩存,兼顧運維和性能;
參考文檔:http://www.verisigninc.com/assets/stellent/030957.pdf