2014年4月4日金曜日

Java jvmのDNSキャッシュ

インフラがドメインのipアドレスを変更して以降javaからの接続でこけるようになった。
javaではipアドレスではなくURLドメイン名で指定してるから問題ねーだろとおもってら
ダメだった。

ググって調べたら
JVMはデフォルトだと一回でも成功しているDNSキャッシュはずっと保持しつづける設定になっている。とのこと
なんでこんな設定になってるのかはDNSリバインディング対策とからしい


インストールされているjavaの中に
/usr/java/j2sdk1.4.2_13/jre/lib/security/java.security
設定ファイルがある

下記行がそのデフォルトを示す設定
#networkaddress.cache.ttl=-1
こいつを下記のように
networkaddress.cache.ttl=0
修正した。

networkaddress.cache.ttl (デフォルト: -1)
java.security で指定して、ネームサービスからの名前の検索に成功した場合のキャッシングポリシーを示します。 指定する値は、成功した検索結果をキャッシュする秒数を示す整数です。-1 の値は、「ずっとキャッシュする」という意味です。

networkaddress.cache.negative.ttl (デフォルト: 10)
java.security で指定して、ネームサービスからの名前の検索に失敗した場合のキャッシングポリシーを示します。 指定する値は、失敗した検索結果をキャッシュする秒数を示す整数です。0 の値は、「キャッシュしない」という意味です。 -1 の値は、「ずっとキャッシュする」という意味です。


■jspで現在どのような状態になっているかも下記内容をいれれば確認できる

<%@ page import="java.net.*,java.security.*,sun.net.*" %>
<%
    InetAddress inetAddress = InetAddress.getByName("www.google.co.jp");
    byte[] address = inetAddress.getAddress();
    out.println("Domain Name : "+inetAddress.getHostName() + "<br>");
    out.println("IP Address : "+inetAddress.getHostAddress() + "<br>");
    out.println("Cache Policy : "+InetAddressCachePolicy.get() + "<br>");    
%>


■参考
http://docs.oracle.com/javase/jp/1.4/guide/net/properties.html
http://dev.classmethod.jp/cloud/apache-tomcat-elb-ttl-1/
http://koteitan.seesaa.net/article/95301330.html

0 件のコメント:

コメントを投稿