このセクションでは、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