設定 DNS 名稱查詢的 JVM TTL - AWS SDK for Java 1.x

截至 2024 年 7 月 31 日, AWS SDK for Java 1.x 已進入維護模式,且將於 2025 年 12 月 31 日end-of-support。我們建議您遷移至 AWS SDK for Java 2.x,以繼續接收新功能、可用性改善和安全性更新。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定 DNS 名稱查詢的 JVM TTL

Java 虛擬機器 (JVM) 會快取 DNS 名稱查詢。當 JVM 將主機名稱解析為 IP 位址時,它會在指定的時間段內快取 IP 位址,稱為存留時間 (TTL)。

由於 AWS 資源使用偶爾變更的 DNS 名稱項目,因此建議您設定具有 5 秒 TTL 值的 JVM。這可確保當資源的 IP 位址變更時,您的應用程式將可透過重新查詢 DNS 來接收並使用資源的新 IP 位址。

在一些 Java 組態上,JVM 的預設 TTL 會如此設定,在重新啟動 JVM 之前,「絕不」重新整理 DNS 項目。因此,如果 AWS 資源的 IP 地址在應用程式仍在執行時變更,在您手動重新啟動 JVM 並重新整理快取的 IP 資訊之前,將無法使用該資源。在此情況下,設定 JVM 的 TTL 至為關鍵,以便其定期重新整理快取的 IP 資訊。

如何設定 JVM TTL

若要修改 JVM 的 TTL,請設定 networkaddress.cache.ttl 安全屬性值,在 $JAVA_HOME/jre/lib/security/java.security Java 8 或 Java 11 或更高$JAVA_HOME/conf/security/java.security版本檔案中設定 networkaddress.cache.ttl 屬性。

以下是java.security檔案的程式碼片段,顯示 TTL 快取設定為 5 秒。

# # This is the "master security properties file". # # An alternate java.security properties file may be specified ... # The Java-level namelookup cache policy for successful lookups: # # any negative value: caching forever # any positive value: the number of seconds to cache an address for # zero: do not cache ... networkaddress.cache.ttl=5 ...

在環境變數所代表的 JVM $JAVA_HOME上執行的所有應用程式都使用此設定。