差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
java:basic:networking:resolve_host_cache_on_suse [2017/01/19 17:06]
tony [How to resolve?]
java:basic:networking:resolve_host_cache_on_suse [2023/06/25 09:48] (目前版本)
行 4: 行 4:
 為了要做某個測試,我們會去修改/​etc/​hosts的內容,讓某個hostname會對應到ip A;但結果卻是對應到ip B,也是此hostname真實的ip。 為了要做某個測試,我們會去修改/​etc/​hosts的內容,讓某個hostname會對應到ip A;但結果卻是對應到ip B,也是此hostname真實的ip。
 ===== How to resolve? ===== ===== How to resolve? =====
-在SUSE上,有一個名為nscdname service cache,其中一個功能就是會cache /​etc/​hosts的查詢結果。在爬些文後,得知只要執行以下指令,就可以清除/​etc/​hosts的cache:​+首先我有確認/​etc/​host.conf確認搜尋hostname順序;後來得知在SUSE上,有一個服務名為nscd提供name service cache,其中一個功能就是會cache /​etc/​hosts的查詢結果。在爬些文後,得知只要執行以下指令,就可以清除/​etc/​hosts的cache:​
 <code bash> <code bash>
 /​usr/​sbin/​nscd -i hosts /​usr/​sbin/​nscd -i hosts
 </​code>​ </​code>​
 +實際測試後發現,依然會存在大概20秒左右的cache;於是我想:​ 這應該是JVM的cache。後來嘗試了兩種做法,並搭配清除hosts cache的指令,就可以做到立即反映結果。第一個方法是透過程式寫入:​ 
 +<code java> 
 +java.security.Security.setProperty("​networkaddress.cache.ttl",​ "​0"​);​ 
 +</​code>​ 
 +第二個方法,是在啟動參數加入:​ 
 +<code bash> 
 +-Dsun.net.inetaddr.ttl=0 
 +</​code>​ 
 +如此就可以順利測試完成。\\ 
 +\\ 
 +目前已知問題是,如果停止了nscd服務後,即使你修改了/​etc/​hosts,hostname依然會維持在上次query的狀況下。
 ===== Reference ===== ===== Reference =====
   * [[https://​linux.die.net/​man/​5/​nscd.conf|About nscd]]   * [[https://​linux.die.net/​man/​5/​nscd.conf|About nscd]]
   * [[https://​www.liquidweb.com/​kb/​flush-dns-cache/​|flush dns cache]]   * [[https://​www.liquidweb.com/​kb/​flush-dns-cache/​|flush dns cache]]
 +  * [[http://​www.ctolib.com/​topics/​61570.html|java实现清理DNS Cache的方法]]
 +  * [[http://​docs.oracle.com/​javase/​7/​docs/​technotes/​guides/​net/​properties.html|Java7 - networking properties]]
 +  * [[http://​www.study-area.org/​2freebsd/​config/​02.htm|/​etc/​host.conf]]
 +
 +=====    =====
 +----
 +\\
 +~~DISQUS~~