Problem
為了要做某個測試,我們會去修改/etc/hosts的內容,讓某個hostname會對應到ip A;但結果卻是對應到ip B,也是此hostname真實的ip。
How to resolve?
首先我有確認/etc/host.conf確認搜尋hostname順序;後來得知在SUSE上,有一個服務名為nscd提供name service cache,其中一個功能就是會cache /etc/hosts的查詢結果。在爬些文後,得知只要執行以下指令,就可以清除/etc/hosts的cache:
/usr/sbin/nscd -i hosts
實際測試後發現,依然會存在大概20秒左右的cache;於是我想: 這應該是JVM的cache。後來嘗試了兩種做法,並搭配清除hosts cache的指令,就可以做到立即反映結果。第一個方法是透過程式寫入:
java.security.Security.setProperty("networkaddress.cache.ttl", "0");
第二個方法,是在啟動參數加入:
-Dsun.net.inetaddr.ttl=0
如此就可以順利測試完成。
目前已知問題是,如果停止了nscd服務後,即使你修改了/etc/hosts,hostname依然會維持在上次query的狀況下。
留言
張貼留言