このセクションでは、JVM に備わっている DNS キャッシュの制御について紹介します。JVM の DNS キャッシュでは、DNS の TTL を無視してキャッシュするようで、名前解決の結果が変わっても JVM からの接続先が切り替わるまでに時間がかかる問題があります。つまり、JVM でアクセスしているホスト名は変化しなくても IPアドレスが変更されると、Java プログラムからサーバーにアクセスできなくなることがあります。
インストールされた JVM のパスを確認します。ここでは、JVM のパスが /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64 であることが確認できます。
[root@java-1 ~]# dirname $(dirname $(readlink $(readlink $(which javac)))) /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64 [root@java-1 ~]#
java.security ファイル( /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/security/java.security )を編集し、以下設定を変更します。
[root@java-1 ~]# vi /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/lib/security/java.security
成功した名前解決の結果のキャッシュの有効期間( networkaddress.cache.ttl )と失敗した名前解決の結果のキャッシュの有効期間( networkaddress.cache.negative.ttl )をそれぞれ指定します。ここでは、600秒と10秒とされぞれ指定しています。
#networkaddress.cache.ttl=-1 networkaddress.cache.ttl=600 networkaddress.cache.negative.ttl=10