閱讀122 返回首頁    go 阿裏雲 go 技術社區[雲棲]


關於java的DNS解析IP緩存問題

最近發現在java執行方法中,如果有對http接口的調用時,會出現接口的相關域名改變後,java服務對接口域名的改變不生效. 很怪異的問題,後台發現是java的DNS解析IP緩存所致.

 

相關知識如下:

java對DNS解析IP進行緩存,默認緩存超時時間為-1(在重啟JVM前永久緩存),
在第一次訪問某域名後將會緩存解析到的IP地址,之後直接從緩存裏獲得所需的信息(如IP地址),而無需再訪問DNS服務器,
但如果在進行支付的時候DNS解析IP的地址有變更的話,提交的地址仍為原解析的IP地址,這將會訪問到無效的IP地址而無法進行支付

建議在java虛擬機的設置中將緩存的時間設置為較小的時間,例如1分鍾(60秒)

由於是全局的變量,在設置後會影響所有的應用程序,請先衡量一下對您平台所有的應用程序是否有影響後再進行設置

設置方法:
在命令啟動JVM的時候設置參數"-Dnetworkaddress.cache.ttl=60 -Dsun.net.inetaddr.ttl=60"
例如:運行Test.class
java -Dnetworkaddress.cache.ttl=60 -Dsun.net.inetaddr.ttl=60 Test

Resin
第一個方式:
修改resin.conf,在 <server-default>下,添加如下配置即可
<jvm-arg>-Dnetworkaddress.cache.ttl=60</jvm-arg>
<jvm-arg>-Dsun.net.inetaddr.ttl=60</jvm-arg>
第二個方式:
在linux /unix 下或編輯 httpd.sh
args='-Dnetworkaddress.cache.ttl=60 -Dsun.net.inetaddr.ttl=60'

websphere
第一個方式:
選擇服務器-> 應用程序服務器-> Server1-> 進程定義->Java 虛擬機。
滾動到通用 JVM 參數,添加:
-Dnetworkaddress.cache.ttl=60 -Dsun.net.inetaddr.ttl=60
單擊確定以保存更改
第二個方式:
修改XML文件
IBM\WebSphere\AppServer\profiles\AppSrv01\config\cells\liangwgNode01Cell\nodes\liangwgNode01\servers\server.xml
在文件末尾,在屬性“disableJIT="false"”之前的位置,
添加:genericJvmArguments="-Dnetworkaddress.cache.ttl=60 -Dsun.net.inetaddr.ttl=60"

Tomcat
第一個方式:
1:進入TOMCAT的bin目錄下,找到tomcat5w.exe文件,雙擊,選擇java,找到java options
在文本框裏添加: -Dnetworkaddress.cache.ttl=60 -Dsun.net.inetaddr.ttl=60
第二個方式:
2: 進入TOMCAT的bin目錄下,找到文件catalina.bat,增加:
JAVA_OPTS="-Xms256 -Xmx512 -Dnetworkaddress.cache.ttl=60 -Dsun.net.inetaddr.ttl=60"

Weblogic
Weblogic目錄下的兩個文件:
%Weblogic_home%\user_projects\domains\domain-name\startWebLogic.cmd(如果是UNIX係統,就是startWebLogic.sh )
%Weblogic_home%\user_projects\domains\domain-name\startManagedWebLogic.cmd
(如果是UNIX係統,就是startManagedWebLogic.sh

 

來自: https://www.iteye.com/topic/658657

 

最後更新:2017-04-04 07:03:06

  上一篇:go Android開發21——隱式意圖
  下一篇:go QT 5.0 正式版發布,支持 C++11